在Linux下的C++编程中,Lambda表达式是一种非常方便的特性,它允许你在代码中定义匿名函数。Lambda表达式通常用于简化代码,特别是在需要传递一个简单的函数对象或回调函数时。
Lambda表达式的基本语法如下:
[捕获列表](参数列表) -> 返回类型 {
// 函数体
}
捕获列表:捕获列表是可选的,用于指定Lambda表达式可以访问的外部变量。捕获方式有值捕获和引用捕获两种。
[=] 表示按值捕获所有外部变量。[&] 表示按引用捕获所有外部变量。[=, &var1, &var2]。[var1, &var2]。参数列表:与普通函数的参数列表相同,可以为空。
返回类型:与普通函数的返回类型相同,可以省略,编译器会自动推导。
下面是一些使用Lambda表达式的例子:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用Lambda表达式对vector进行排序
std::sort(vec.begin(), vec.end(), [](int a, int b) {
return a < b;
});
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
#include <iostream>
#include <functional>
int main() {
int x = 10;
int y = 20;
// 捕获外部变量x和y
auto add = [x, y]() {
return x + y;
};
std::cout << "Sum: " << add() << std::endl; // 输出 Sum: 30
return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
int factor = 2;
// 按值捕获factor,按引用捕获vec
std::transform(vec.begin(), vec.end(), vec.begin(), [factor, &vec](int num) {
return num * factor;
});
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
#include <iostream>
#include <functional>
int main() {
// 定义一个无参数的Lambda表达式
auto sayHello = []() {
std::cout << "Hello, World!" << std::endl;
};
sayHello(); // 调用Lambda表达式
return 0;
}
Lambda表达式在C++编程中非常有用,特别是在需要传递函数对象或回调函数时。通过合理使用Lambda表达式,可以使代码更加简洁和易读。