std::for_each

 1 #include <algorithm>
 2
 3 #include <iostream>
 4 #include <vector>
 5 #include <string>
 6
 7 using std::vector;
 8 using std::string;
 9 using std::cout;
10 using std::endl;
11
12 template<class InputIter, class Func>
13 Func LTM_for_each(InputIter first, InputIter last, Func func)
14 {
15     while (first != last)
16     {
17         func(*first);
18         ++first;
19     }
20     return func;
21 }
22
23 void helperFunction(string& str)
24 {
25     str += ".cpp";
26 }
27
28 void print(vector<string> vec)
29 {
30     vector<string>::iterator iter;
31     for (iter = vec.begin(); iter != vec.end(); iter++)
32     {
33         cout << *iter << endl;
34     }
35     cout << ‘\n‘;
36 }
37
38 int main(void)
39 {
40     vector<string> vec;
41     vec.push_back("a");
42     vec.push_back("b");
43     vec.push_back("c");
44     vec.push_back("d");
45     print(vec);
46
47     // for_each(vec.begin(), vec.end(), helperFunction);
48     LTM_for_each(vec.begin(), vec.end(), helperFunction);
49     print(vec);
50
51     return 0;
52 }
时间: 2024-10-10 15:35:02

std::for_each的相关文章

C++ STL 学习 :for_each与仿函数(functor)

简单来将,仿函数(functor)就是一个重载了"()"运算符的struct或class,利用对象支持operator()的特性,来达到模拟函数调用效果的技术. 我们平时对一个集合类遍历的时候,例如vector,是这样做的: for(vector<int>::const_iterator iter = ivec.begin(); iter != ivec.end(); ++iter) { //do your whatever you want here } 例如下面的代码:

STL C++ std::bind操作例子,仿函数操作配合算法库操作

1.stl::bind 和std::mem_fun_ref系列的配合使用出现了问题,多参形式不知道如何组织.适配器的操作真心难受!!!只能迷迷糊糊地用着.要使用非质变算法时需要作用于容器时只能考虑lambda或者transfer操作.待续 // functor-adapter_p431.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <algorithm>//元素操作算法 #include <functiona

for_each与伪函数

1.for_each就是封装好的循环遍历函数.共三个参数,前两个为迭代器,最后一个参数为函数指针或者伪函数. 函数原型如下(effective stl): template< typename InputIterator, typename Function > Function for_each( InputIterator beg, InputIterator end, Function f ) { while ( beg != end ) f( *beg++ ); } 2.伪函数就是重载

并行但并不十分高效的 for_each 实现

class ThreadsJoiner { std::vector<std::thread>& threads; public: ThreadsJoiner(std::vector<std::thread>& threads_): threads(threads_) {} ~ThreadsJoiner() { for (auto& thread : threads) { if (thread.joinable()) { thread.join(); } }

for_each函数

for_each函数的用法 std::for_each(cpths.begin(), cpths.end(), print); 其中print函数为 void print(const std::string& e) { std::cout << e << std::endl; } 以上语句 等价于: std::vector<std::string>::const_iterator iter = cpths.begin(); for (; iter != cpth

C++11 lambda表达式在for_each和transform算法下的使用

以前,在lambda表达式没有进入标准的时候,对容器的遍历等涉及到使用函数指针的情况,一般人会懒得使用std::for_each,或std::transform,也许只是一个短短的几句话,却要单独写个函数,或函数对象,写的代码反而不如自己用for循环来的快. 但是,C++11引入了lambda表达式后,一切都变的简单了! 1.lambda表达式 lambda表达式是一个匿名函数,用它可以非常方便的表示一个函数对象,先简单说一下lambda表达式,下面这张图表示了C++11中lambda表达式的写

代码简洁之道:C++ 11 之auto+ for_each + lamda表达式

摘要:在很多中情况下,我们需要这样的运算:给vector中每个元素进行相似的处理(每个元素+1,或者其他).一般情况下,我们会选用for循环,然后然后对每个元素进行处理.实际上,C++ 11提供了了lamda表达式,结合for_each,可以写出更加简洁和高效的代码. 1.for_each.简介 for_each是C++中的模板,具体用法可以参考这里:http://www.cplusplus.com/reference/algorithm/for_each/ 2.lamda表达式 lamda表达

C++基于范围的for循环性能测试(针对std::vector)

1.代码如下: void output1(int x){ if (x == 10000000) { std::cout << x << std::endl; } }const std::string getCurrentSystemTime(){ auto tt = std::chrono::system_clock::to_time_t (std::chrono::system_clock::now()); struct tm* ptm = localtime(&tt);

std::thread

std::thread为C++11的线程类,使用方法和boost接口一样,非常方便.C++11的std::thread解决了boost::thread中构成参数限制的问题. #include <thread>         // std::thread, std::thread::id, std::this_thread::get_id  #include <chrono>         // std::chrono::seconds void threadfun1(){}vo