谓词与lambda表达式
来源:互联网 发布:阿里云vpn搭建openvpn 编辑:程序博客网 时间:2024/05/22 14:15
谓词
谓词是一个可调用的表达式,其返回结果是一个能用作条件的值,一般作为算法重载的参数使用。STL中所使用的谓词分为两类:
一元谓词:只接受一个函数;
二元谓词:可以接受两个参数。
接受谓词参数的算法对输入序列中的元素调用谓词。因此,元素类型必须能转换为谓词参数类型。
例如:
//比较函数,用来按长度排序单词bool isShorter(const string &s1,const string &s2){ return s1.size()<s2.size();}//按长度由短至长排序vector<string>:words isShorter即被称为谓词sort(words.begin(),words.end(),isShorter);
根据算法接受一元谓词还是二元谓词,我们传递给算法的谓词必须严格按照接受一个或两个参数。但是,如果在一个算法使用中,需要更多的参数,超出了对谓词的限制。则可以考虑lambda表达式。
lambda
对于一个对象或一个表达式,如果可以对其使用调用运算符(即圆括号“()”),则称它为可调用的。一个lambda(音译为:兰布达)表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。lambda表达式具有如下形式:
[capture list] (parameter list) -> return type {function body}
capture list(捕获列表):一个lambda所在函数中定义的局部变量列表,只用于函数体内局部非static变量,lambda可以直接使用局部static变量和在它函数之外声明的名字;
parameter list(参数列表)、return type(返回类型)、function body(函数体)。我们可以忽略参数列表和返回类型,但必须永远包含捕获列表和函数体,示例如下:
#include<iostream>using namespace std;int main(){ auto f=[] {return 43;}; cout<<f()<<endl; return 0;}运行结果如下:
注:如果lambda的函数体包含任何单一return语句之外的内容,且未指定返回类型,则返回void。
参考书籍:《C++ Primer》 第五版 P344
0 1
- 谓词与lambda表达式
- 谓词与lambda、bind
- 谓词,lambda表达式和bind
- iOS-正则表达式与谓词
- 一元谓词接受多个参数--lambda表达式的魅力
- 谓词表达式
- 委托与Lambda表达式
- invokedynamic与lambda表达式
- lambda表达式与异常
- Lambda表达式与表达式树
- 使用Lambda与不使用Lambda表达式
- Lambda表达式与委托类型
- 匿名方法与lambda表达式
- c#委托与Lambda表达式
- 匿名方法与lambda表达式
- 匿名方法 与 Lambda 表达式
- 委托,Lambda表达式与事件
- lambda表达式与Function接口
- iOS学习笔记40-GCD定时器的实现
- Systemd 基本概论介绍
- 英特尔 QSV 在 FFMPEG 中的使用(Linux)
- 进制转换(递归实现)
- Linux中iptables设置详细
- 谓词与lambda表达式
- Linux 下 java 监控 程序运行
- oracle锁概念,阻塞
- Don't use dynamic versions for your dependencies
- jquery获取滚动条高度和位置,JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
- 支持向量机通俗导论
- 【刷机】小米降级刷机 线刷 图解 MIUI降级刷机
- PhotoShop图层混合模式的Canvas实现
- gcc命令的使用