//捕获列表#include<iostream>#include<string>#include<algorithm>usingnamespace std;intmain(){/*Lambda捕获----[=]值捕获,不可修改,[&]引用捕获,可修改值*/int a =1;int b =2;int c =3;int d =4;//按值捕获,如果需要修改值,则需要加上mutable//案例:auto sum=[=]()mutable{return a + b + c + d; };auto sum=[=](){return a + b + c + d;};
cout <<sum()<< endl;//引用捕获auto sum1 =[&](){return(a++)+ b + c + d;};//如果使用值传递,则a++为不可改变的左值
cout <<sum1()<< endl;//值传递+引用传递
a =1;auto sum2 =[a,b,&c,&d](){return a + b +(++c)+(++d);};
cout <<sum2()<< endl;//[=,a,b,c,d]--[&,a,b,c,d] 使用=/&符加参数列表也可以方便捕获,// 但是之后位置则不可以出现不同捕获方式.}
//Lambda使用案例#include<iostream>#include<string>#include<algorithm>#include<vector>usingnamespace std;boolcomp(int val1,int val2){return val1 < val2;}intmain(){/*Lambda使用案例*/
vector<int> v ={30,50,80,40,90,70,10};for(constauto&i:v){
cout <<i<<ends;}
cout <<"算法之前"<< endl;sort(v.begin(),v.end(),comp);for(constauto& i : v){
cout << i<<ends;}
cout <<"算法之后"<< endl;/*之前需要使用谓词,可以使用Lambda来进行自定义排序*/
vector<int> v1 ={5,9,3,4,1,7};for(constauto& i : v1){
cout << i << ends;}
cout <<"Lambda算法之前"<< endl;sort(v1.begin(), v1.end(),[&](int vi1,int vi2){return vi1 < vi2;});for(constauto& i : v1){
cout << i << ends;}
cout <<"Lambda算法之后"<< endl;//使用Lambda表达式之后,可以取代之前的谓词}