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 起) | 
|    将一个函数应用于某一范围的元素  (函数模板)  |