Home C&C++函数库 c++ 语法 程序源码 Linux C库

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 搜索子序列的范围(函数模板)

联系我们 免责声明 关于CandCplus 网站地图