template< class InputIt, class Size, class UnaryFunc >
InputIt for_each_n( InputIt first, Size n, UnaryFunc f );
class ForwardIt, class Size, class UnaryFunc >
ForwardIt for_each_n( ExecutionPolicy&& policy,
Applies the given function object f to the result of dereferencing every iterator in the range [
first,
first + n)
. If f returns a result, the result is ignored.
1) f is applied in order starting from first.
2) f might not be applied in order. The algorithm is executed according to policy.
This overload participates in overload resolution only if all following conditions are satisfied:
If n >= 0 is not true, 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 are TriviallyCopyable.
[
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 have const &.
The type Type must be such that an object of type InputIt can be dereferenced and then implicitly converted to Type.
â
Type requirements -InputIt
must meet the requirements of LegacyInputIterator. -ForwardIt
must meet the requirements of LegacyForwardIterator. -Size
must be convertible to an integral type. [edit] Return value
An iterator equal to first + n, or more formally, to std::advance(first, n).
[edit] ComplexityExactly n applications of f.
[edit] ExceptionsThe overload with a template parameter named ExecutionPolicy
reports errors as follows:
ExecutionPolicy
is one of the standard policies, std::terminate is called. For any other ExecutionPolicy
, the behavior is implementation-defined.See also the implementation in libstdc++, libc++ and MSVC 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; }[edit] Example
#include <algorithm> #include <iostream> #include <vector> void println(auto const& v) { for (auto count{v.size()}; const auto& 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, 5 2, 4, 6, 4, 5[edit] See also
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4