C++11的Lambda
来源:互联网 发布:信息融合数据关联 编辑:程序博客网 时间:2024/06/05 20:14
由来
在上一篇博客STL学习之函数对象中提到
Effective STL第46条:考虑使用函数对象而不是函数作为STL算法的参数
在Effective STL成书的时候,c++11应该还没定稿,那时候写函数对象给stl算法调用时很平常的。但是这种写法比较啰嗦,要写全局函数,容易把代码搞得支离破碎,于是c++11提出了Lambda匿名函数,在搭配stl算法的时候非常方便。这里记录下。
平台
vs2015
win10 64bit
代码
无捕获,无输入参数,有返回值
#define NUM 100000typedef std::vector<double> VecDouble;VecDouble data(NUM),datacalc(NUM);srand((unsigned)time(NULL));//生成随机数组std::generate(data.begin(), data.end(), [] { return rand(); });
如果用函数对象的话需要另外写一个函数
typedef struct _Gen : public std::unary_function<void, double>{ double operator()(void) { return(rand()); }}Gen;
然后再调用
std::generate(data.begin(), data.end(), Gen());
相比较而言,Lambda匿名函数更简单方便。
有捕获,有输入参数,无返回值
int cnt = 0;//捕获一个变量计算数组中大于1000的个数std::for_each(data.begin(), data.end(), [&cnt](double value) { if (value > 1000) { ++cnt; } } );
有捕获,有输入参数,有返回值
int x = 55;int y = 10;//根据外部参数及数组内部值计算某个数并修改回原数组,其中`->double`可省略std::transform(data.begin(), data.end(), data.begin(), [&x,&y](double value)/*->double*/ { return(sqrt(value) + x + y); } );
参考
1.遇见C++ Lambda
2.C++lambda详解~读书笔记
0 0
- 【C++】C++11新特性 之 lambda表达式的使用
- [c#]: Lambda
- C#-Lambda
- c#Lambda
- c#lambda
- C++11 的Lambda
- C++11的lambda
- C++11的Lambda
- c#=>lambda表达式的理解
- C++11 学习笔记 lambda表达式
- 【C++】C++11特性:lambda和function
- C++11 学习笔记 lambda表达式
- C++11 学习笔记 lambda表达式
- 【c/c++】Lambda表达式
- c++11 lambda 的效率
- C++11的lambda运算
- C++11的lambda运算
- C++11::lambda 的用法
- 解决Python报错:local variable 'xxx' referenced before assignment
- Linux基础教程
- 信息安全技术实用教程
- 单片机原理与应用技术
- 云舒网络译:Rancher1.0正式版发布
- C++11的Lambda
- C语言程序设计教程
- RHCE考试经验
- 红帽 Linux 考试 要求
- linux通过校园网上网
- GNU ARM 汇编指令
- 关于ARM处理器中operand2的理解分析
- centos 5.3 桌面3D特效
- 数据库(六)数据库索引