1.介绍
lambda 函数是 C++11 引入的一种新特性,它允许你定义一个匿名的函数对象,可以用来作为参数传递给其他函数或算法。lambda 函数的语法非常简洁,可以让你在不定义完整函数的情况下快速实现简单的功能。
lambda 函数的语法如下:
[capture list] (parameters) -> return type { function body }
其中,capture list
是捕获列表,用于指定 lambda 函数可以访问哪些外部变量;parameters
是参数列表,与普通函数的参数列表相同;return type
是返回类型,可以省略,编译器会自动推断;function body
是函数体,包含 lambda 函数的实现。
2.例子
下面是一个简单的示例,演示如何使用 lambda 函数:
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {1, 2, 3, 4, 5}; int sum = 0; std::for_each(v.begin(), v.end(), [&sum](int x) { sum += x; }); std::cout << "Sum: " << sum << std::endl; return 0; }
在这个示例中,我们定义了一个 std::vector
对象 v
,并使用 std::for_each()
算法遍历它。std::for_each()
算法接受一个函数对象作为参数,并对容器中的每个元素调用这个函数对象。
我们使用 lambda 函数作为 std::for_each()
算法的第三个参数。这个 lambda 函数接受一个整数参数 x
,并将其累加到外部变量 sum
中。由于我们需要在 lambda 函数中修改外部变量 sum
的值,所以我们在捕获列表中使用了引用捕获 [&sum]
。
这段代码的输出结果是:
Sum: 15
注意捕获列表是可选的,如果不需要访问外部变量,那么可以省略捕获列表。例如:
std::thread t([](){ std::cout << "Hello from thread" << std::endl; });
在这个示例中,我们创建了一个线程 t
,它执行一个没有捕获列表的 lambda 函数。这个 lambda 函数输出一行文本,然后结束。