Lambda表达式就是一个匿名函数,允许使用函数功能,但无需为这个函数命名
lambda表达式格式通常为:
[ list ] ( params ) -> ret { func }
( params )中为匿名函数的参数,ret为匿名函数返回类型,{ func }中为函数体,
其中[ list ]表示含义为匿名函数访问的外部(父作用域)变量,举例如下所示:
int main() {
int tem = 0;
auto func = ([]()->void
{
cout << tem << endl;
});
func();
return 0;
}
但编译的时候会报错,原因是匿名函数此时无法访问全局变量tem,要想使用该变量,需将其加到[ list ]列表中即可:
int main() {
int tem = 0;
auto func = ([tem]()->void
{
cout << tem << endl;
});
func();
return 0;
}
参数获取方式有按值和按引用两种:
[a, &b]表示按值获取a,按引用获取b;
[&, a]表示除了参数a按值获取之外,按引用获取所有父作用域变量;
[=,&b]表示除了参数b按引用获取之外,按值获取其他所有父作用域变量。
利用lambda定义sort()中的比较函数:
#include"iostream"
#include"vector"
#include"algorithm"
using namespace std;
int main() {
vector<int> vec;
int i(0);
while(i<10)
{
vec.push_back(i);
i++;
}
sort(vec.begin(), vec.end(), [](int &a, int &b)->bool {
return a < b;
});
for (int j = 0; j < vec.size(); ++j)
cout << vec[j] << endl;
return 0;
}