谓词 & 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. HIVE:谓词下推

    2024-07-21 12:20:04       26 阅读
  2. 谓词 & lambda & bind()

    2024-07-21 12:20:04       15 阅读
  3. hive SQL谓词下推

    2024-07-21 12:20:04       26 阅读
  4. STL——函数对象和谓词

    2024-07-21 12:20:04       27 阅读
  5. 什么是sql的谓词下推

    2024-07-21 12:20:04       54 阅读
  6. Gateway路由谓词(断言)功能

    2024-07-21 12:20:04       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 12:20:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 12:20:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 12:20:04       45 阅读
  4. Python语言-面向对象

    2024-07-21 12:20:04       55 阅读

热门阅读

  1. 系统运维的数字化与智能化探索

    2024-07-21 12:20:04       17 阅读
  2. Python异常处理

    2024-07-21 12:20:04       13 阅读
  3. 力扣题解(完全平方数)

    2024-07-21 12:20:04       20 阅读
  4. leetcode位运算(1720. 解码异或后的数组)

    2024-07-21 12:20:04       16 阅读
  5. 数据结构 day1

    2024-07-21 12:20:04       15 阅读
  6. 5 webSocket

    2024-07-21 12:20:04       18 阅读
  7. 什么是样本不平衡?

    2024-07-21 12:20:04       16 阅读
  8. 面向开发者的提示词工程第六章-文本转换

    2024-07-21 12:20:04       17 阅读