谓词 & lambda & bind()

对于许多算法,不想使用默认的运算方式,可以使用它的重载版本,新的参数接收谓词,从而会对序列中的元素调用谓词,元素类型必须能转换为谓词参数的类型

可调用表达式:可以使用()调用运算符调用,包括函数,函数指针,lambda,bind,重载()的类……

(n元)谓词:一个可调用表达式,接受n个参数

限制:特定算法仅可接受特定n元的谓词,传入函数()形式的谓词时,可能并不满足参数个数的限制,所以应使用其他形式

lambda

定义:[capture list捕获列表]  (parameter list参数列表)  ->return type返回类型(尾置返回) {function body函数体}

auto name = lambda

必须存在【】& {},其他可以省略

【capture list】:lambda可以定义在函数中,但要使用局部变量,必须包含在capture list中

  1. 空捕获:【】不使用所在函数的任何局部变量
  2. 显示:【name list】【&name list】:使用拷贝的形式,注意拷贝发生在定义lambda时,而非调用()时,因此在定义后修改name list的值,没有任何效果。 注意在使用&捕获时,要注意&对象在lambda调用时存在
  3. 隐式:【=】【&】自动推断,
  4. 混合显示与隐式:【=,&name】【&,name】,注意第一个元素必须是=|&隐式捕获,表示默认捕获方式。 注意显示捕获必须与隐式使用不同的方式

parameter list:不能有默认参数

return type:当function body尾return的形式,可以自动推断,否则为void

注意:当lambda作为函数return返回值,不能包含引用捕获,和函数不能返回局部引用一个原理

调用:和普通函数相同,都使用()调用运算符

lambda作为谓词,可以控制lambda的参数个数

bind()

#include <functional>

相较于lambda,bind用于多次使用相同的操作时,而不是多次编写相同的lambda

定义 : auto newCallable新的可调用对象 = bind(callable可调用对象, parameter list参数列表)

调用:newCallable(parameter list)

调用newCallable时会调用callable并传入参数列表(parameter list)

parameter list:

  1. 普通参数
  2. std::placeholders::_n占位符:表示调用newCallable传入的第n个参数,
  3. 引用参数:ref()返回给定对象的引用

简化占位符使用

  1. using std::placeholders::_1; using std::placeholders::_2;……
  2. using namespace std::placeholders;
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值