c++ Lambda表达式简介
来源:互联网 发布:worktile基础版 mac 编辑:程序博客网 时间:2024/05/18 02:45
Lambda表达式
C++11标准的lambda引入的主要目的是:
能够将类似于函数的表达式用作接受函数指针或函数符的函数参数,因此,典型的lambda表达式是测试表达式或者比较表达式,可编写为一条语句,这使得lambda简洁而易于理解。
1、一个lambda表达式有如下类型:
[capture list](parameter list)->returntype{function body}
Capture list是(捕获列表)一个lambda所在的函数中定义的局部函数变量的列表,return type、parameter list、function list分别表示返回类型、参数列表和函数体。
2、lambda捕获和返回
(1)、值捕获
Size_tv1=23;
autof2=[v1]{return v1;}
v1=0;
autoj=f();//j=23
(2)、引用捕获
Size_tv2=34;
autof2=[&v2]{return v2;}
v1=0;
autoj=f();//j=0
(3)、隐式捕获
W=find_if(q.begin(),q.end(),[=](conststring &s){return s.size()>=sz;})//=为值捕获,&为引用捕获
(4)、可变的lambda
如果希望改变被捕获的变量,就必须在参数前加上mutable,如以下例子:
Size_tv1=23;
autof2=[v1]()mutable{return ++v1;}
v1=0;
autoj=f();//j=23//j=24
Size_tv2=34;
autof2=[&v2]{return ++v2;}
v1=0;
autoj=f();//j=1
lambda的捕获列表
[]-------空捕获列表,lambda不能使用所在的函数变量,一个lambda只能在捕获变量后才能使用它;
[names]--------names是一个逗号分隔的名字列表;
[&]----------隐式捕获列表,采用引用捕获方式;
[=]-----------隐式捕获列表,采用值捕获方式;
使用示例代码:
/*lambda表达式的使用*/#include<iostream>#include<vector>#include<cmath>#include<algorithm>#include<ctime>using namespace std;void lambda(){vector<int> numbers(Size);srand(time(0));//以时间作为随机种子 generate(numbers.begin(),numbers.end(),rand);//生成随机数并且加入容器中 cout<<"SIZE="<<numbers.size()<<'\n';//容器的大小 int count3=count_if(numbers.begin(),numbers.end(),[](int x){return x%3==0;});//lambda表达式实现整除于3的计算个数 cout<<"count3="<<count3<<'\n';int count13=0;for_each(numbers.begin(),numbers.end(),[&count13](int x){count13+=x%13==0;});cout<<"count13="<<count13<<'\n';count3=count13=0;for_each(numbers.begin(),numbers.end(),[&](int x){count3+=x%3==0;count13==x%13==0;});cout<<"count3="<<count3<<'\n'; cout<<"count13="<<count13<<'\n';} int main(){lambda();return 0;}
(全文完)
- [C++]Lambda表达式简介
- Lambda表达式 简介
- c++ Lambda表达式简介
- Lambda表达式简介
- 【c/c++】Lambda表达式
- C#--Lambda表达式
- C#:Lambda 表达式
- C++lambda表达式
- C++lambda表达式
- C# Lambda表达式
- C++:lambda表达式
- C#Lambda表达式
- 【c++】lambda表达式
- C++lambda表达式简记
- c#lambda表达式复习
- 【C#】理解Lambda表达式
- 【C++】Lambda表达式
- C++lambda表达式
- BNU 33561 Cantonese Dialect
- Prerequisite Check "CheckRollbackable" On Auto-rollback Patches Failed (文档 ID 1331900.1)
- 把文件存放在SDCard中
- 1-100之间的所有素数
- Asp身份验证的3种方式
- c++ Lambda表达式简介
- [BZOJ2480]SDOI2012 Longge的问题|欧拉函数
- CSS制作斜角上有背景图片的Div层
- 第11题
- php实现四种基本排序算法
- disklrucache
- 《第一行代码-Android》学习笔记(二十一)WebView控件总结【修改】
- A. Little Elephant and Interval
- 迭代器