std::all_of...td::none_of(3)
π std::all_of, std::any_of, std::none_of β C++ Standard Libary π
okay so bestie, this is the manual page std::all_of...td::none_of(3) from the C++ Standard Libary (yes, the typo is canon π). It's the all_of / any_of / none_of trio, and they are literally here to check a unary predicate over a range. π
πΈ NAME πΈ
std::all_of,std::any_of,std::none_of β std::all_of, std::any_of, std::none_of. That's the whole squad: three algorithms, one range, one predicate, no cap. π«Ά
β¨ Synopsis β¨
Defined in header <algorithm>.
template< class InputIt, class UnaryPred > (1) (since C++11)
bool all_of( InputIt first, InputIt last, UnaryPred p ); (constexpr since C++20)
template< class ExecutionPolicy, class ForwardIt, class UnaryPred > (2) (since C++17)
bool all_of( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, UnaryPred p );
template< class InputIt, class UnaryPred > (3) (since C++11)
bool any_of( InputIt first, InputIt last, UnaryPred p ); (constexpr since C++20)
template< class ExecutionPolicy, class ForwardIt, class UnaryPred > (4) (since C++17)
bool any_of( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, UnaryPred p );
template< class InputIt, class UnaryPred > (5) (since C++11)
bool none_of( InputIt first, InputIt last, UnaryPred p ); (constexpr since C++20)
template< class ExecutionPolicy, class ForwardIt, class UnaryPred > (6) (since C++17)
bool none_of( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, UnaryPred p );
Here's the tea on each overload, fr fr:
1)Checks if unary predicatepreturnstruefor all elements in the range[first, last).3)Checks if unary predicatepreturnstruefor at least one element in the range[first, last).5)Checks if unary predicatepreturnstruefor no elements in the range[first, last).2,4,6)Same as(1,3,5), but executed according topolicy. These overloads participate in overload resolution only if:
std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> is true.
(until C++20)
std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> is true.
(since C++20)
π§ Parameters π§
first,lastβ the range of elements to examine.policyβ the execution policy to use. See execution policy for details.pβ unary predicate. The expressionp(v)must be convertible toboolfor every argumentvof type (possibly const)VT, whereVTis the value type ofInputIt, regardless of value category, and must not modifyv. Thus, a parameter type ofVT&is not allowed, nor isVTunless forVTa move is equivalent to a copy (since C++11).
bestie, thatVT&thing is not allowed β andVTis also not allowed unless forVTa move is equivalent to a copy (since C++11). iykyk π
π¦ Type requirements π¦
InputItmust meet the requirements of LegacyInputIterator.ForwardItmust meet the requirements of LegacyForwardIterator.UnaryPredmust meet the requirements of Predicate.
π Return value π
highkey here's the return-value table translated into bullet form, because tables are not the vibe in this terminal:
- Has true element: Yes, has false element: Yes β
all_of=false,any_of=true,none_of=false - Has true element: Yes, has false element: No β
all_of=true,any_of=true,none_of=false - Has true element: No, has false element: Yes β
all_of=false,any_of=false,none_of=true - Has true element: No, has false element: No β
all_of=true,any_of=false,none_of=true
β Complexity β
1-6) At most std::distance(first, last) applications of the predicate p. That's the whole budget, lowkey.
π Exceptions π
The overloads with a template parameter named ExecutionPolicy report errors as follows:
- If execution of a function invoked as part of the algorithm throws an exception and
ExecutionPolicyis one of the standard policies,std::terminateis called. For any otherExecutionPolicy, the behavior is implementation-defined. - If the algorithm fails to allocate memory,
std::bad_allocis thrown.
π Possible implementation π
See also the implementations of
all_ofin libstdc++ and libc++.any_ofin libstdc++ and libc++.none_ofin libstdc++ and libc++.
all_of
template<class InputIt, class UnaryPred>
constexpr bool all_of(InputIt first, InputIt last, UnaryPred p)
{
return std::find_if_not(first, last, p) == last;
}
any_of
template<class InputIt, class UnaryPred>
constexpr bool any_of(InputIt first, InputIt last, UnaryPred p)
{
return std::find_if(first, last, p) != last;
}
none_of
template<class InputIt, class UnaryPred>
constexpr bool none_of(InputIt first, InputIt last, UnaryPred p)
{
return std::find_if(first, last, p) == last;
}
π Example π
// Run this code
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <numeric>
#include <vector>
int main()
{
std::vector<int> v(10, 2);
std::partial_sum(v.cbegin(), v.cend(), v.begin());
std::cout << "Among the numbers: ";
std::copy(v.cbegin(), v.cend(),
std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
if (std::all_of(v.cbegin(), v.cend(), [](int i) { return i % 2 == 0; }))
std::cout << "All numbers are even\n";
if (std::none_of(v.cbegin(), v.cend(), std::bind(std::modulus<>(),
std::placeholders::_1,
2)))
std::cout << "None of them are odd\n";
struct DivisibleBy
{
const int d;
DivisibleBy(int n) : d(n) {}
bool operator()(int n) const { return n % d == 0; }
};
if (std::any_of(v.cbegin(), v.cend(), DivisibleBy(7)))
std::cout << "At least one number is divisible by 7\n";
}
Output
Among the numbers: 2 4 6 8 10 12 14 16 18 20
All numbers are even
None of them are odd
At least one number is divisible by 7
πΈ See also πΈ
ranges::all_of(C++20)(niebloid)ranges::any_of(C++20)(niebloid)ranges::none_of(C++20)(niebloid)
The trio checks if a predicate is true for all, any or none of the elements in a range. Obsessed. π₯
π source: http://cppreference.com Β· version/date: 2024.06.10 Β· page: std::all_of...td::none_of(3) β k bye bestie, go check those predicates and slay π
β¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms