std::all_of,std::any_of,std::none_of (3) Linux Manual Page
std::all_of,std::any_of,std::none_of – std::all_of,std::any_of,std::none_of
Synopsis
Defined in header <algorithm>
template< class InputIt, class UnaryPredicate > (since C++11)
bool all_of( InputIt first, InputIt last, UnaryPredicate p ); (until C++20)
template< class InputIt, class UnaryPredicate > (since C++20)
constexpr bool all_of( InputIt first, InputIt last, UnaryPredicate p );
template< class ExecutionPolicy, class ForwardIt, class UnaryPredicate > (2) (since C++17)
bool all_of( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, UnaryPredicate p );
template< class InputIt, class UnaryPredicate > (since C++11)
bool any_of( InputIt first, InputIt last, UnaryPredicate p ); (until C++20)
template< class InputIt, class UnaryPredicate > (1) (since C++20)
constexpr bool any_of( InputIt first, InputIt last, UnaryPredicate p );
template< class ExecutionPolicy, class ForwardIt, class UnaryPredicate > (4) (since C++17)
bool any_of( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, UnaryPredicate p ); (3)
template< class InputIt, class UnaryPredicate > (since C++11)
bool none_of( InputIt first, InputIt last, UnaryPredicate p ); (until C++20)
template< class InputIt, class UnaryPredicate > (5) (since C++20)
constexpr bool none_of( InputIt first, InputIt last, UnaryPredicate p );
template< class ExecutionPolicy, class ForwardIt, class UnaryPredicate > (6) (since C++17)
bool none_of( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, UnaryPredicate p );
1) Checks if unary predicate p returns true for all elements in the range [first, last).
3) Checks if unary predicate p returns true for at least one element in the range [first, last).
5) Checks if unary predicate p returns true for no elements in the range [first, last).
2,4,6) Same as (1,3,5), but executed according to policy. These overloads do not participate in overload resolution unless std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> is true
Parameters
first, last – the range of elements to examine
policy – the execution policy to use. See execution_policy for details.
p – The expression p(v) must be convertible to bool for every argument v of type (possibly const) VT, where VT is the value type of InputIt, regardless of value_category, and must not modify v. Thus, a parameter type of VT&is not allowed
Type requirements
–
InputIt must meet the requirements of LegacyInputIterator.
–
ForwardIt must meet the requirements of LegacyForwardIterator.
–
UnaryPredicate must meet the requirements of Predicate.
Return value
1-2) true if unary predicate returns true for all elements in the range, false otherwise. Returns true if the range is empty.
3-4) true if unary predicate returns true for at least one element in the range, false otherwise. Returns false if the range is empty.
5-6) true if unary predicate returns true for no elements in the range, false otherwise. Returns true if the range is empty.
Complexity
1,3,5) At most last – first applications of the predicate
2,4,6) O(last-first) applications of the predicate
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 ExecutionPolicy is one of the standard_policies, std::terminate is called. For any other ExecutionPolicy, the behavior is implementation-defined.
* If the algorithm fails to allocate memory, std::bad_alloc is thrown.
Possible implementation
First version
Second version
Third version
Example
// Run this code
#include <vector>
#include <numeric>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <functional>
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<int>(), 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:
