C++ Lambada表达式

C++ Lambda表达式

Lambda表达式创建匿名函数对象,优势是不需要重新定义一个函数,只需要在函数指针的参数入口处写Lambda表达式,好处是简洁,增加代码的可读性,不需要重新定义函数
Lambda表达式包括捕获列表,参数列表,函数选项,返回值类型,函数体组成,其中捕获列表可以捕获当前可用的变量,有两种捕获方式,一种是引用捕获,一种是值捕获,函数列表用于传入函数参数,函数选项可以是mutable,当以值的类型捕获当前可用的变量时,默认是const传递,值不可被改变,使用mutable可以改变这一特性,返回值类型可以手动指定,也可以使用自定义类型推导
通过引用的方式捕获变量

    int a = 2;
    int b = 3;
    auto f = [&a]()->int{return a+=1;};
    cout << f() << endl;

通过值的方式捕获变量,要改变值必须引入函数选项mutable

    int a = 2;
    int b = 3;
    auto f = [a]()mutable->int{return a+=1;};
    cout << f() << endl;

下面的代码运行结果如下

int a = 2;
int b = 3;
auto f = [a]()mutable->int{return a+=1;};
cout << f() << endl;
cout << a << endl;

在这里插入图片描述
说明在lambda表达式内部有一个同名的变量a将main函数中的变量a覆盖

 vector<int> v{1,2,3};
 for_each(v.begin(),v.end(),[](int value){cout << value << endl;});

在Lambada表达式中,第一个表示当前代码段作用域传入的参数,第二个参数表示使用的参数,第三个参数表示函数的具体实现。
Lambada表达式可以直接使用当前可使用的变量,比如

int a =3;
 for_each(v.begin(),v.end(),[a](int value){cout << value << endl;});

还可以使用引用,从而对变量的值进行修改

int a =3;
 for_each(v.begin(),v.end(),[a](int value){cout << value << endl;
 a = 4;});

还可以直接使用“ = ”表示传入当前所有可用变量的copy
“ & ”表示传入当前所有可用变量的引用

int a =3;
 for_each(v.begin(),v.end(),[=](int value){cout << value << endl;});
int a =3;
 for_each(v.begin(),v.end(),[&](int value){cout << value << endl;
 a = 4;});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值