当前位置 博文首页 > nameofcsdn的博客:lambda表达式入门
目录
一,lambda表达式
二,lambda表达式各部分用法
1,[]
2,->
lambda表达式相当于就是一个匿名函数。
使用示例:
#include<iostream>
#include <algorithm>
using namespace std;
int main()
{
int x[]={4,6,2,5};
sort(x,x+sizeof(x)/sizeof(int),[](int a,int b){return a>b;});
for(int i=0;i<sizeof(x)/sizeof(int);i++)cout<<x[i]<<" ";
return 0;
}
其中,[](int a,int b){return a>b;}? 就是一个lambda表达式,相当于仿函数 greater<int>()
?
[]用来控制lambda表达式中可以使用哪些外部变量。
(1)&是引用所有变量
#include<iostream>
#include <algorithm>
using namespace std;
int main()
{
int x[]={4,6,2,5},s=0;
for_each(x,x+sizeof(x)/sizeof(int),[&](int x){s+=x;});
cout<<s;
return 0;
}
(2)=是按值传递所有变量
#include<iostream>
#include <algorithm>
using namespace std;
int main()
{
int x[]={4,6,2,5},s=10;
for_each(x,x+sizeof(x)/sizeof(int),[=](int x){cout<<s+x;});
return 0;
}
(3)&和=可以组合使用
(4)this是引用所在类中的成员变量
#include<iostream>
#include <algorithm>
using namespace std;
class S{
private:
int x[4],s;
public:
S()
{
x[0]=2,x[1]=3,x[2]=5,x[3]=4;
s=0;
}
void out()
{
for_each(x,x+sizeof(x)/sizeof(int),[this](int x){cout<<s+x;s+=10;});
}
};
int main()
{
S a;
a.out();
return 0;
}
不过,根据我的实测,无论成员变量是共有还是私有,无论[]中是this还是=还是&,效果都是一样的。
->用来控制lambda表达式的返回值类型,对于可以自动推导的返回值类型,这个可以省略。
如果没有return语句或者只有一个return语句,是肯定可以推导出来的,如果超过1个return语句,就看各个return的表达式的类型是否一致了。
#include<iostream>
using namespace std;
template <typename FUN>
void f(FUN func)
{
cout<<func(1.2)<<" ";
}
int main()
{
f([=](double x){return x;});
f([=](double x)->int{return x;});
return 0;
}
输出11.2 1
?
cs