zoukankan      html  css  js  c++  java
  • STL 算法 std::for_each

    std::for_each(threads.begin(),threads.end(), std::mem_fn(&std::thread::join));

    1. 说明

    2. 写用法

    3.写样例

    直接参考 cplusplus官网讲解: http://www.cplusplus.com/reference/algorithm/for_each/

    我的理解:

    std::for_each

    第一个参数表示一段区间的开始,可以是迭代器,也可以是数组的某个位置;

    第二个参数表示一段区间的结束,可以是迭代器,也可以是数组的某个位置;

    第三个参数表示一个可调用对象,可以是函数,可以是函数对象,也可以是lamdba;

    std::for_each 返回第三个参数,或者第三个参数的右值引用。

    思考:std::for_each遍历一段区间,并把区间内的每一个成员作为参数传递给可调用对象,那么问题来了,遍历过程中,有且仅有一个参数被传递给可调用对象, 假设可调用对象有不止一个参数,又该如何处理呢? 请看下面的代码例子。

    练习代码:

     1 // for_each example
     2 #include <iostream>     // std::cout
     3 #include <algorithm>    // std::for_each
     4 #include <vector>       // std::vector
     5 
     6 void myfunction (int i) {  // function:
     7   std::cout << ' ' << i;
     8 }
     9 
    10 struct myclass {           // function object type:  one paramter
    11   void operator() (int i) {std::cout << ' ' << i;}
    12 } myobject;
    13  
    14 struct myclass_twoParam {           // function object type:  two or more paramter
    15   void operator() (int i, int ii) {std::cout << ' ' << i<<" "<<ii;}  
    16 } myobject_TwoParam;
    17 
    18 
    19 
    20 int main () {
    21   std::vector<int> myvector;
    22   myvector.push_back(10);
    23   myvector.push_back(20);
    24   myvector.push_back(30);
    25 
    26   std::cout << "myvector contains: ";
    27   for_each (myvector.begin(), myvector.end(), myfunction);  //给 for_each 传递一个函数
    28   std::cout << '
    ';
    29 
    30   // or:
    31   std::cout << "myvector contains:";
    32   for_each (myvector.begin(), myvector.end(), myobject);   //给 for_each 传递一个函数对象
    33 std::cout << ' ';
    34
    35 // or:
    36 std::cout << "myvector contains:";//给 for_each 传递一个lamdba
    37 for_each (myvector.begin(), myvector.end(), [&](int i){myobject_TwoParam(i, 100);}); //当可调用对象或者函数的参数数量超过两个时, 可以给 for_each传递一个lamdba临时可调用对象,用这个临时可调用对象将原可调用对象包裹一次。
    38 std::cout << ' ';
    39
    40 return 0;
    41   }

    结果输出:

    原创文章, 转载请注明出处!

  • 相关阅读:
    前端页面弹框遮罩禁止页面滚动
    微信浏览器兼容问题
    判断是否为空对象的方法
    reflow和repaint理解总结
    45道CSS基础面试题(附答案)
    iframe跨域修改子页面内容或样式
    日期中前一天和后一天
    js事件绑定方法
    C#常用的数据格式转换
    C#代码和javascript函数相互调用
  • 原文地址:https://www.cnblogs.com/azbane/p/15366662.html
Copyright © 2011-2022 走看看