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/

STL 算法 std::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 << 'n';
29 
30   // or:
31   std::cout << "myvector contains:";
32   for_each (myvector.begin(), myvector.end(), myobject);   //给 for_each 传递一个函数对象
33 std::cout << 'n';
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 << 'n';
39
40 return 0;
41   }

结果输出:

STL 算法 std::for_each

 

 

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

 

原文链接: https://www.cnblogs.com/azbane/p/15366662.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    STL 算法 std::for_each

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/398273

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月12日 上午9:36
下一篇 2023年4月12日 上午9:36

相关推荐