| 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 Size,class UnaryFunc> InputIt for_each_n( InputIt first, Size n, UnaryFunc f); | (1) | (since C++17) (constexpr since C++20) |
template<class ExecutionPolicy, class ForwardIt,class Size,class UnaryFunc> | (2) | (since C++17) |
Applies the given function objectf to the result of dereferencing every iterator in the range[first, first+ n). Iff returns a result, the result is ignored.
UnaryFunc is notMoveConstructible, the behavior is undefined.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) |
UnaryFunc is notCopyConstructible, the behavior is undefined.Ifn>=0 is nottrue, the behavior is undefined.
If the iterator type (InputIt/ForwardIt) is mutable,f may modify the elements of the range through the dereferenced iterator.
Unlike the rest of the parallel algorithms,for_each_n is not allowed to make copies of the elements in the sequence even if they areTriviallyCopyable.
Contents |
| first | - | the beginning of the range to apply the function to |
| n | - | the number of elements to apply the function to |
| policy | - | theexecution policy to use |
| f | - | function object, to be applied to the result of dereferencing every iterator in the range[first, first+ n)The signature of the function should be equivalent to the following: void fun(const Type&a); The signature does not need to haveconst&. |
| Type requirements | ||
-InputIt must meet the requirements ofLegacyInputIterator. | ||
-ForwardIt must meet the requirements ofLegacyForwardIterator. | ||
-Size must be convertible to an integral type. | ||
An iterator equal tofirst+ n, or more formally, tostd::advance(first, n).
Exactlyn applications off.
The overload with a template parameter namedExecutionPolicy reports errors as follows:
ExecutionPolicy is one of thestandard policies,std::terminate is called. For any otherExecutionPolicy, the behavior is implementation-defined.See also the implementation inlibstdc++,libc++ andMSVC stdlib.
template<class InputIt,class Size,class UnaryFunc>InputIt for_each_n(InputIt first, Size n, UnaryFunc f){for(Size i=0; i< n;++first,(void)++i) f(*first); return first;} |
#include <algorithm>#include <iostream>#include <vector> void println(autoconst& v){for(auto count{v.size()};constauto& e: v)std::cout<< e<<(--count?", ":"\n");} int main(){std::vector<int> vi{1,2,3,4,5}; println(vi); std::for_each_n(vi.begin(),3,[](auto& n){ n*=2;}); println(vi);}
Output:
1, 2, 3, 4, 52, 4, 6, 4, 5
| applies a function to a range of elements, storing results in a destination range (function template)[edit] | |
range-for loop(C++11) | executes loop over range[edit] |
| applies a unaryfunction object to elements from arange (function template)[edit] | |
(C++20) | applies a function object to the first N elements of a sequence (algorithm function object)[edit] |