C++ STL : for_each

来源:互联网 发布:时时彩娱乐平台源码 编辑:程序博客网 时间:2024/06/04 21:40

定义

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(last!=first)    {        fn(*first); // 调用fn,并把元素传递给fn函数        ++first;     }    return fn;}

参数

first, last

类型为一个序列的迭代器类型,分别表示一个序列(比如vector容器)的开始位置和结束位置,注意范围是前闭后开的,即包含first但是不包含last

fn
一个可以接受序列元素为参数的一元函数(只有一个参数的函数),它可以是一个函数指针或者是一个仿函数(就是重载了()操作符的类)

使用例子

#include <iostream>#include <algorithm>#include <vector>// generic functionvoid function(int a){    std::cout << "function : "  << a << std::endl;}// move constructible functionstruct MyClass{    void operator () (int i)    {           std::cout << "MyClass : "  << i << std::endl;            }};int main(int argc, char argv[]){    std::vector<int> vec;    vec.push_back(100);    vec.push_back(200);    vec.push_back(300);    std::for_each(vec.begin(), vec.end(), function);    MyClass c;    std::for_each(vec.begin(), vec.end(), c);    return 0;}

输出:

function : 100function : 200function : 300MyClass : 100MyClass : 200MyClass : 300

总结

  • std::for_each用于在遍历一个容器或序列时执行同一个函数调用
  • 在使用时要包含algorithm头文件
  • 注意元素不包含last元素
  • 被调用的函数要能够接受迭代器所指向的数据类型
0 0