什么是Lambda表达式
C++11引入了lambda表达式,它是一种匿名函数,可以用于创建内联函数对象,我们可以将它当作一种简单的函数定义和调用的方式
[capture list](parameters list) -> return_type {
// 函数体
}
- capture list:引入外部变量并且作为lambda函数的参数使用
- parameters list:lambda函数参数列表
- return_type:指定lambda函数的返回类型,可以省略,编译器会自动推断
Lambda表达式的使用
Lambda表达式作为函数参数
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5};
std::sort(nums.begin(), nums.end(), [](int a, int b) -> bool { return a < b; });
for (int num : nums) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
代码示例1中的代码片段:[](int a, int b) -> bool { return a < b; }就是一个lambda表达式,他告诉std::sort
如何比较元素,这段代码约等于bool compare(int a, int b) { return a > b; }
Lambda表达式捕获外部变量
#include <iostream>
int main() {
int x = 10;
int y = 20;
// Lambda表达式捕获外部变量x和y
auto add = [x, y]() {
return x + y;
};
std::cout << "Sum: " << add() << std::endl;
return 0;
}
在上述示例中,Lambda表达式捕获了外部变量x和y的值,然后返回它们的和。
Lambda表达式作为返回值
#include <iostream>
auto createMultiplier(int factor) {
// 返回一个Lambda表达式,用于将输入乘以factor
return [factor](int x) {
return x * factor;
};
}
int main() {
auto multiplyBy2 = createMultiplier(2);
std::cout << "Result: " << multiplyBy2(5) << std::endl; // 输出 10
return 0;
}
在这个示例中,createMultiplier传入了参数factor,他返回了一个lambda表达式,这个lambda表达式将返回传入的参数x乘以createMultiplier的参数factor的积。