- 语法
[ capture list ] ( parameter list) -> return type { function body; };
[捕获列表]( 参数列表 ) -> 返回值类型{函数体}
- 参数列表和返回类型可以为空,但是捕获列表和函数体不能为空
auto f = []{return 42};
auto f = [](int a) -> int { return a + 1; }; std::cout << f(1) << std::endl; // 输出: 2
- 捕获列表
- [] 不捕获任何变量。
- [&] 捕获外部作用域中所有变量,并作为引用在函数体中使用(按引用捕获)。
- [=] 捕获外部作用域中所有变量,并作为副本在函数体中使用(按值捕获)。
- [=,&foo] 按值捕获外部作用域中所有变量,并按引用捕获 foo 变量。
- [bar] 按值捕获 bar 变量,同时不捕获其他变量。
- [this] 捕获当前类中的 this 指针,让 lambda 表达式拥有和当前类成员函数同样的访问权限。如果已经使用了 & 或者 =,就默认添加此选项。捕获 this 的目的是可以在 lamda 中使用当前类的成员函数和成员变量。
- 在 sort中的用法,在leetcode题解中看到的,使用lambda 表达式自定义排序规则。
sort(people.begin(), people.end(), [](const vector<int>& u, const vector<int>& v) {
return u[0] < v[0] || (u[0] == v[0] && u[1] > v[1]);
});
有关知识点可看https://blog.csdn.net/u013390476/article/details/50424995
- 默认状态下,sort只有两个参数,默认按照vector中的对象operator< 即从小到大排列。
- 第三个参数可以是一个谓词,自定义排序规则。
- 谓词可以是一个函数指针,此函数有两个参数,返回bool值,即比较两个对象,想要的顺序就返回ture。
- 谓词还可以是lambda,来自定义排序规则。