std::for_each_n
来自cppreference.com
定义于头文件 <algorithm>
|
||
template< class InputIt, class Size, class UnaryFunction > InputIt for_each_n( InputIt first, Size n, UnaryFunction f ); |
(1) | (C++17 起) |
template< class ExecutionPolicy, class ForwardIt, class Size, class UnaryFunction2 > ForwardIt for_each_n( ExecutionPolicy&& policy, ForwardIt first, Size n, UnaryFunction2 f ); |
(2) | (C++17 起) |
1) 按顺序应用给定的函数对象
f
到解引用范围 [first, first + n)
中每个迭代器的结果。2) 应用给定的函数对象
f
到解引用范围 [first, first + n)
中每个迭代器的结果(不必按顺序)。算法按照 policy
执行。此重载不参与重载决议,除非 std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> 为 true 。对于两种重载,若迭代器是可改的,则 f
可以通过解引用的迭代器修改范围中的元素。若 f
返回结果,则忽略结果。若 n
小于零,则行为未定义。
目录 |
[编辑] 参数
first | - | 要应用函数的范围起始 |
n | - | 要应用函数的元素个数 |
policy | - | 所用的执行策略。细节见执行策略。 |
f | - | 函数对象, 应用到范围 [first, first + n) 中每个迭代器解引用结果 函数签名应当等价于如下者: void fun(const Type &a); 签名不必拥有 const & 。 |
类型要求 | ||
-InputIt 必须满足 InputIterator 的要求。
| ||
-ForwardIt 必须满足 ForwardIterator 的要求。
| ||
-UnaryFunction 必须满足 MoveConstructible 的要求。不必为可复制构造(CopyConstructible )
| ||
-UnaryFunction2 必须满足 CopyConstructible 的要求。
|
[编辑] 返回值
first + n
[编辑] 复杂度
正好 n
次应用 f
[编辑] 异常
拥有名为 ExecutionPolicy
的模板参数的重载按下列方式报告错误:
- 若作为算法一部分调用的函数的执行抛出异常,且
ExecutionPolicy
是三个标准策略之一,则调用 std::terminate 。对于任何其他ExecutionPolicy
,行为是实现定义的。 - 若算法无法分配内存,则抛出 std::bad_alloc 。
[编辑] 可能的实现
template<class InputIt, class Size, class UnaryFunction> InputIt for_each_n(InputIt first, Size n, UnaryFunction f) { for (Size i = 0; i < n; ++first, (void) ++i) { f(*first); } return first; } |
[编辑] 示例
本节未完成 原因:暂无示例: |
[编辑] 参阅
将一个函数应用于某一范围的元素 (函数模板) | |
范围 for 循环 | 执行范围上的循环 (C++11 起) |
将一个函数应用于某一范围的元素 (函数模板) |