Constrained algorithms and algorithms on ranges(C++20) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Constrained algorithms, e.g.ranges::copy,ranges::sort, ... | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Execution policies(C++17) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Numeric operations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Operations on uninitialized memory | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Defined in header <algorithm> | ||
template<class InputIt,class UnaryPred> bool all_of( InputIt first, InputIt last, UnaryPred p); | (1) | (since C++11) (constexpr since C++20) |
template<class ExecutionPolicy,class ForwardIt,class UnaryPred> bool all_of( ExecutionPolicy&& policy, | (2) | (since C++17) |
template<class InputIt,class UnaryPred> bool any_of( InputIt first, InputIt last, UnaryPred p); | (3) | (since C++11) (constexpr since C++20) |
template<class ExecutionPolicy,class ForwardIt,class UnaryPred> bool any_of( ExecutionPolicy&& policy, | (4) | (since C++17) |
template<class InputIt,class UnaryPred> bool none_of( InputIt first, InputIt last, UnaryPred p); | (5) | (since C++11) (constexpr since C++20) |
template<class ExecutionPolicy,class ForwardIt,class UnaryPred> bool none_of( ExecutionPolicy&& policy, | (6) | (since C++17) |
[
first,
last)
.[
first,
last)
.[
first,
last)
.std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> istrue. | (until C++20) |
std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> istrue. | (since C++20) |
Contents |
first, last | - | the pair of iterators defining therange of elements to examine |
policy | - | theexecution policy to use |
p | - | unary predicate . The expressionp(v) must be convertible tobool for every argument |
Type requirements | ||
-InputIt must meet the requirements ofLegacyInputIterator. | ||
-ForwardIt must meet the requirements ofLegacyForwardIterator. | ||
-UnaryPred must meet the requirements ofPredicate. |
Range has sometrue element | Yes | No | ||
---|---|---|---|---|
Range has somefalse element | Yes | No | Yes | No[1] |
all_of | false | true | false | true |
any_of | true | true | false | false |
none_of | false | false | true | true |
The overloads with a template parameter namedExecutionPolicy
report errors as follows:
ExecutionPolicy
is one of thestandard policies,std::terminate is called. For any otherExecutionPolicy
, the behavior is implementation-defined.See also the implementations of
all_of |
---|
template<class InputIt,class UnaryPred>constexprbool all_of(InputIt first, InputIt last, UnaryPred p){returnstd::find_if_not(first, last, p)== last;} |
any_of |
template<class InputIt,class UnaryPred>constexprbool any_of(InputIt first, InputIt last, UnaryPred p){returnstd::find_if(first, last, p)!= last;} |
none_of |
template<class InputIt,class UnaryPred>constexprbool none_of(InputIt first, InputIt last, UnaryPred p){returnstd::find_if(first, last, p)== last;} |
#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{constint 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 20All numbers are evenNone of them are oddAt least one number is divisible by 7
(C++20)(C++20)(C++20) | checks if a predicate istrue for all, any or none of the elements in a range (algorithm function object)[edit] |