目录
c++在c++11标准中引入了lambda表达式,一般用于定义匿名函数,使得代码更加灵活简洁。lambda表达式与普通函数类似,也有参数列表、返回值类型和函数体,只是它的定义方式更简洁,并且可以在函数内部定义。
1. 什么是Lambda表达式
最常见的lambda的表达式写法如下
auto plus = [] (int v1, int v2) -> int { return v1 + v2; }
int sum = plus(1, 2);
这里只是计算两个数的和,我们一般情况下肯定是不会这么用的,更多的时候,我们都是和stl的一些算法结合使用,例如自定义一个结构体的排序规则和打印。
struct Item
{
Item(int aa, int bb) : a(aa), b(bb) {}
int a;
int b;
};
int main()
{
std::vector<Item> vec;
vec.push_back(Item(1, 19));
vec.push_back(Item(10, 3));
vec.push_back(Item(3, 7));
vec.push_back(Item(8, 12));
vec.push_back(Item(2, 1));
// 根据Item中成员a升序排序
std::sort(vec.begin(), vec.end(),
[] (const Item& v1, const Item& v2) { return v1.a < v2.a; });
// 打印vec中的item成员
std::for_each(vec.begin(), vec.end(),
[] (const Item& item) { std::cout << item.a << " " << item.b << std::endl; });
return 0;
}
这样的写法让我们代码更加简洁、清晰,可读性更强。
在c++的官方文档中,给出了lamda表达式的四种写法,这里知乎的排版有点难用,所以直接在官方文档上截了一个图。
下面介绍一下lambda的四种表达式的含义,以及表达式中各个成分的,其实说白就是在自己理解的基础上翻译一下官方文档。