尽管 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
内部使用捕获变量的引用,因此可以修改原变量的值。
今天的文章分享就到这里了,希望对大家的学习和工作有所帮助哦~