std::
for_each
函数模板 <algorithm>
template <class InputIterator, class Function>
Function for_each (InputIterator first, InputIterator last, Function fn); |
将函数应用于范围
对范围[first,last]中的每个元素应用fn函数。
这个函数模板的行为相当于:
template<class InputIterator, class Function>
Function for_each(InputIterator first, InputIterator last, Function fn)
{
while (first!=last) {
fn (*first);
++first;
}
return fn; // or, since C++11: return move(fn);
} |
☲ 参数
-
first, last
-
指向序列初始和最终位置的输入迭代器。使用的范围是[first,last],
它包含first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素。
-
fn
-
接受范围内元素作为参数的一元函数。
这可以是一个函数指针,也可以是一个move constructible函数对象。
它的返回值(如果有的话)将被忽略。
☉ 返回值
-
c++98
-
返回fn。
-
c++11
-
返回fn,就像调用std::move(fn)。
☣ 示例
// for_each example
#include <iostream> // std::cout
#include <algorithm> // std::for_each
#include <vector> // std::vector
void myfunction (int i) { // function:
std::cout << ' ' << i;
}
struct myclass { // function object type:
void operator() (int i) {std::cout << ' ' << i;}
} myobject;
int main () {
std::vector<int> myvector;
myvector.push_back(10);
myvector.push_back(20);
myvector.push_back(30);
std::cout << "myvector contains:";
for_each (myvector.begin(), myvector.end(), myfunction);
std::cout << '\n';
// or:
std::cout << "myvector contains:";
for_each (myvector.begin(), myvector.end(), myobject);
std::cout << '\n';
return 0;
} |
输出:
myvector contains: 10 20 30
myvector contains: 10 20 30
✥ 复杂度
在first 和last之间的distance达到线性:对每个元素调用fn。
⇄ 数据竞争
访问[first,last]范围内的对象(每个对象只访问一次)。
如果InputIterator是可变迭代器类型且fn不是常量函数,则可以修改这些对象。
☂ 异常安全性
如果迭代器上的fn或操作抛出,则抛出。
注意,无效的参数会导致未定义的行为。
🍄 另请参阅
transform |
改变范围(函数模板) |
find |
在范围内查找值(函数模板) |
search |
搜索子序列的范围(函数模板) |