lambda表达式
(1).什么是lambda
假设有这样一个类
struct Goods
{
string _name; // 名字
double _price; // 价格
int _evaluate; // 评价
};
现在要将商品分别按照名字,价格三种方式排序,为此我们必须写三个仿函数,但这个有点麻烦,因为一旦比较的逻辑不一样,就得多实现一个类,所以c++11出现了与局部深度绑定的lambda表达式,其本质上是一个匿名函数。
eg:
vector<Goods> v = {
{
"苹果", 2.1, 5 }, {
"香蕉", 3, 4 }, {
"橙子", 2.2,
3 }, {
"菠萝", 1.5, 4 } };
sort(v.begin(), v.end(), [](const Goods& g1, const Goods& g2){
return g1._price < g2._price; });
sort(v.begin(), v.end(), [](const Goods& g1, const Goods& g2){
return g1._price > g2._price; });
(2).lambda基本规则
格式[capture-list](parameters) mutable->return-type-{statement}
[capture-list] :捕捉列表,该列表总是出现在lambda函数的开始位置,编译器根据[]来判断接下来的代码是否为lambda函数,捕捉列表能够捕捉上下文的变量供lambda函数使用
(parameters):参数列表,与普通函数的参数列表一致,如果不需要传参,则可以与()一起省略
mutable:默认情况下,lambda函数总是一个const函数,即捕捉过来的参数自动加了const,如果需要改变参数const’属性,需在()后加mutable
->returntype:返回值类型,用追踪返回类型形式声明函数的返回值类型,没有返回值时此部分可省略,返回值类型明确情况下,也可省略,由编译器对返回类型进行推导。
{statement}:函数体。除可以使用参数外,还可以使用所有捕获到的变量
小结:参数和返回值可以省略,捕捉列表和函数体不能省略。
[capture-list] (parameters) mutable -> return-type {
statement }
捕捉列表 参数 返回值 函数体
最简单的lambda表达式,该表达式无意义
[] {
};
auto Add1 = [](int x, int y)->double {
return (x + y) / 3.0; };
cout << Add1(2, 3) << endl;//Add1其实就是一个局部匿名函数
int x = 3;
int a = 4, b = 5;
auto Add2 = [a, b,x] ()mutable//无参数可以直接省略
{
a = a + 3<
C++ Lambda详解

本文深入讲解C++中的Lambda表达式,包括其定义、基本规则、实现原理及应用场景,并探讨了如何利用lambda表达式简化代码,提高编程效率。
最低0.47元/天 解锁文章
2108

被折叠的 条评论
为什么被折叠?



