尽管 C++ 主要是一种面向对象的语言,但它也支持函数式编程的部分特性,如高阶函数、匿名函数(Lambda 表达式)和不可变数据结构。
Lambda表达式的应用
它是 C++11 的重要特性,允许在函数内部定义匿名函数,可以捕获作用域中的变量,并用于许多常见的函数式编程。举个例子,如下所示:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
int factor = 2;
// 使用 Lambda 表达式捕获外部变量 factor
std::transform(numbers.begin(), numbers.end(), numbers.begin(),
[factor](int n) { return n * factor; });
// 输出变换后的结果
for (int num : numbers) {
std::cout << num << " "; // 输出:2 4 6 8 10
}
std::cout << std::endl;
// 修改捕获方式,捕获变量的引用
std::for_each(numbers.begin(), numbers.end(),
[&factor](int &n) { n += factor; });
for (int num : numbers) {
std::cout << num << " "; // 输出:4 6 8 10 12
}
return 0;
}
上述代码中 Lambda 表达式可以通过捕获列表([]
)捕获作用域中的变量。捕获方式有两种:按值捕获(如 [factor]
)和按引用捕获(如 [&factor]
)。如果是按值捕获时,Lambda 内部使用捕获变量的副本。如果是按引用捕获时,Lambda 内部使用捕获变量的引用,因此可以修改原变量的值。
今天的文章分享就到这里了,希望对大家的学习和工作有所帮助哦~