什么是 lambda
lambda 表达式(体) 是 C++11 引入的一种匿名函数(既没有名字的函数),可以在函数内部快速定义一个小型函数,并在当前作用域中使用。
它的一般形式如下:
1 | [捕获列表] (参数列表) -> 返回类型 { |
各部分的含义
捕获列表
表示这个 lambda 按引用捕获 的外部变量。
也就是说,lambda 内部可以访问的作用域里面的变量。
[&]:按引用捕获所有外部变量(可修改变量值并直接应用到外部);[=]:按值捕获所有外部变量(不能修改外部变量本身);[&x,y]:按引用捕获x,按值捕获y`;[this]:捕获当前类对象的this指针。
示例:
1 | auto f=[&](int num) -> int { ... }; |
参数列表
就跟普通的函数一样,上面这个例子就接受一个 int 类型的 num 变量。
返回类型
可以不写,编译器会自动推断,但是为了清晰,这里建议显示写成返回值类型。
函数体
就是 lambda 的内容。
示例:
1 | auto f=[&](int a,int b) -> int { |
为什么使用 lambda
如果我们现在要求一个数组的一段的和,那么我们可以通过 sum(r)-sum(l-1) 求出,如果要封装函数:
1 | int sum(vector<int> a,int x) { |
由于每次都要引入 a,不仅程序变慢,并且代码很冗长,还要反复传参。
而 lambda 允许我们:
在函数内部直接定义;
直接访问外层的变量;
更加局部化(不污染全局命名空间)。
所以我们可以直接:
1 | void solve() { |
比之前方便多了qwq。
你学会了吗qwq
--- 本文结束 The End ---