1、lambda表达式的引入
lambda表达式(也叫匿名函数)的引入的主要目的是,让您能够使用表达式用作接受函数指针或函数符的函数的参数。很多时候lambda和普通函数(函数指针)的功能一样。但与普通函数不同的地方在于lambda可以捕获局部变量,lambda表达式可以在函数体中使用该变量,和参数传递的效果一样。但在某些场合中,lambda捕获则表现出巨大的作用,比如当lambda表达式作为谓词使用在STL的算法函数中的时候。比如实现一个函数,将一个vector < int >中的大于某一个数的修改为0。
注:谓词
谓词是一个可调用的表达式,其返回结果是一个能用作条件的值。标准库算法所使用的谓词分为两类:一元谓词(只接受一个参数)和二元谓词(有两个参数)。接受谓词参数的算法对输入序列中的元素调用谓词。因此,元素类型必须能转换为谓词的参数类型。比如标准库函数中用查找的find_if(),该函数的第一个和第二个参数是一个迭代器,第三个则是一个谓词。返回第一个使谓词返回非0只的元素,若不存在这样的元素,则返回尾迭代器。find_if()的定义如下:
template<class InputIterator, class UnaryPredicate>
InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred)
{
while (first!=last) {
if (pred(*first)) return first;
++first;
}
return last;
}
2、lambda表达式
(1)lambda表达式定义
lambda表达式表示一个可调用的代码单元,可理解为一个未命名的内联函数(匿名函数)。与任何函数类似,lambda表达式有一个返回类型,一个参数列表,一个函数体。但与函数不同的是,lambda可能定义在函数内部。lambda表达式的形式如下