C++ for_each学习笔记
2015-11-23 21:42
471 查看
欢迎转载,转账请注明原文地址:/article/8326783.html
一、学习完iterator之后,遍历容器我们会写出这样的代码:
不过看到 vector<int>::const_iterator iter = ivec.begin(); 觉得,这么一长串真的好吗?
c++11有auto关键字,直接for(auto iter = iver.begin; ...)倒是方便了许多。
二、
C++ stl有一个模板函数for_each,可用于遍历。配合function和function object(仿函数)功能强大。(不过比Python的for还是复杂了不少啊!可惜c++没有像Python一样简洁的for i in list:...)
for_each用于逐个遍历容器元素,它对迭代器区间[first,last)所指的每一个元素,执行由单参数函数对象f所定义的操作。
for_each的原型如下:
1、最简单的for_each配合function操作。
2、也可以配合function object进行操作:
3.c++ 11 lambda表达式大大的简化了编写函数的麻烦,很多简单的操作直接可以使用匿名函数来处理。这样for_each等模板函数用的更广泛了。
一、学习完iterator之后,遍历容器我们会写出这样的代码:
#include <vector> #include <iostream> using namespace std; int main() { int ia[] = {1, 2, 3}; vector<int> ivec(ia, ia + sizeof(ia) / sizeof(int)); for(vector<int>::const_iterator iter = ivec.begin(); iter != ivec.end(); ++iter) { cout << *iter << endl; } return 0; }
不过看到 vector<int>::const_iterator iter = ivec.begin(); 觉得,这么一长串真的好吗?
c++11有auto关键字,直接for(auto iter = iver.begin; ...)倒是方便了许多。
二、
C++ stl有一个模板函数for_each,可用于遍历。配合function和function object(仿函数)功能强大。(不过比Python的for还是复杂了不少啊!可惜c++没有像Python一样简洁的for i in list:...)
for_each用于逐个遍历容器元素,它对迭代器区间[first,last)所指的每一个元素,执行由单参数函数对象f所定义的操作。
for_each的原型如下:
template<typename InputIterator, typename Function> Function for_each(InputIterator beg, InputIterator end, Function f) { while(beg != end) f(*beg++); }
1、最简单的for_each配合function操作。
#include <iostream> #include <vector> #include <iostream> #include <algorithm> using namespace std; void print(int& elem) { cout << elem << endl; } int main() { int ia[] = {1, 2, 3}; vector<int> ivec(ia, ia + sizeof(ia) / sizeof(int)); for_each(ivec.begin(), ivec.end(), print); }可以把处理逻辑写在print里面,比如过滤,判断,输出等等。
2、也可以配合function object进行操作:
#include <iostream> #include <vector> #include <iostream> #include <algorithm> using namespace std; struct print{ void operator()(int elem) { cout << elem << endl; } }; int main() { int ia[] = {1, 2, 3}; vector<int> ivec(ia, ia + sizeof(ia) / sizeof(int)); for_each(ivec.begin(), ivec.end(), print()); return 0; }
3.c++ 11 lambda表达式大大的简化了编写函数的麻烦,很多简单的操作直接可以使用匿名函数来处理。这样for_each等模板函数用的更广泛了。
#include <iostream> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { int ia[] = {1, 2, 3}; vector<int> ivec(ia, ia + sizeof(ia) / sizeof(int)); for_each(ivec.begin(), ivec.end(), [&](int i){cout << i << endl;}); return 0; }
相关文章推荐
- C/C++中void用法总结
- 数据抽象与封装的好处--【primer第四版】
- C/C++学习(二)输入n个整数,输出其中最小的k个。
- 合并两个有序数组(C++版)
- c++之判断栈的弹出是否合法
- c++之栈的顺序表实现
- C语言初学者画图练习
- C语言初学者简单语法综合练习
- C语言初学者简单语法小测
- c++栈之带括号的四则运算
- c++友元类及友元函数
- Python中的for与其他类C语言的比较(如c++,c#)
- 1、让自己习惯c++
- Python之自动化生成解析XML的C++类(基于tinyxml库解析)
- C++ Primer书中第二章经常用到的Sales_data类
- Effective C++读书笔记一
- Python之自动生成解析ini文件的C++类(基于libiniparser.a)
- C/C++学习(一)题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
- iOS求职:C语言面试题
- C语言读取文件