lambda表达式,bind函数

什么是lambda表达式?:一块代码单元,可以理解为未命名的内联函数。

形式:【捕获列表】(参数列表)->返回类型 { 表达式体 }

例子:

[ ](const string& s1, const string& s2){ return s1.size() < s2.size()};

可以省略参数列表和返回类型,但是必须包括捕获列表和表达式体
auto f = [ ] { return 100};
cout << f(); //输出100
捕获列表:
只有捕获列表中捕获一个所在函数的局部变量,才能够在表达式体中使用。

显示捕获

  1. 值捕获 :直接写变量的名字:例如:[size] { }
  2. 引用捕获 : 例如:[&size] { }

隐式捕获:让编译器根据表达式体中的代码来推断我们需要哪些变量。=表示值捕获,&表示引用捕获
比如:[=] {}; {&} {};
也可以混合使用显示捕获和隐士捕获,此时,捕获列表的第一个必须是&或者=,并且显示和隐式必须使用不同的捕获方式,比如:隐式捕获使用了=,后面显示捕获必须使用引用捕获(&变量名)。[=, &size] { }
如何改变一个别捕获的变量?
在参数列表尾部添加mutable关键字。例如:auto f = v mutable {retuern ++v;}

                            **bind()函数**
                            
头文件:#include <functional>
形式: auto newCallable = bind(callable, arg_list)

newCallable:新可调用对象
callable: 原函数
arg_list是传给原函数的参数,可以是多个。里面可能包含“_n”的名字,n是一个整数。这些是“占位符”,表示的意思是:这里是一个参数,这个参数是在调用newCallable是传进来的,如果是“_1”,表示newCallable的第一个参数.一次类推。

比如:auto g = bind(func, a, b, _2, c, _1);

g(X,Y)等价于func(a, b, Y, c, X);

举个例子:
场景:我们在使用find_if函数时候,第三个参数只能穿一个函数指针,那么这个函数的参数怎么在调用它的时候传呢?

bool fun(const string& s, int size)
{
return s.sie()>=size;
}
find_if(v.begin(), v.end(), bind(fun,_1, 4));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值