本文主要是介绍谓词与lambda表达式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
谓词
谓词是一个可调用的表达式,其返回结果是一个能用作条件的值,一般作为算法重载的参数使用。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
这篇关于谓词与lambda表达式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!