lambda 表达式是 C++11 引入的一个重要特性,它可以方便地定义匿名函数。在 C++ 中,lambda 表达式可以用于多种场景,包括函数对象、函数指针和标准算法等。下面将介绍 lambda 表达式在不同场景下的使用方法。

1. 作为函数对象

lambda 表达式可以直接作为函数对象使用,可以在代码中定义一个 lambda 表达式并将其赋值给一个变量,然后通过该变量来调用 lambda 表达式。

auto func = [](int x, int y) { return x + y; };
int result = func(3, 4); // 调用 lambda 表达式
Plain text

上述代码定义了一个 lambda 表达式,它以两个参数 x 和 y 为输入,并返回它们的和。然后通过将 lambda 表达式赋值给一个变量 func,可以通过该变量调用 lambda 表达式,并将返回结果保存在变量 rest̲ 中。

2. 作为函数指针

除了作为函数对象之外,lambda 表达式还可以转换为函数指针类型,使其可以在其他函数中作为参数传递。

auto func = [](int x, int y) { return x + y; };
int (*pFunc)(int, int) = func; // 将 lambda 表达式转换为函数指针类型
int result = pFunc(3, 4); // 调用函数指针
Plain text

上述代码将 lambda 表达式转换为函数指针类型 ()(,),然后可以将该函数指针传递给其他函数,或者直接调用该函数指针来执行对应的 lambda 表达式。

3. 与标准算法配合使用

lambda 表达式可以与标准算法(如 std::sortstd::foreach 等)配合使用,以提供灵活的算法实现。

std::vector nums = {3, 1, 4, 1, 5, 9, 2, 6, 5};
// 使用 lambda 表达式对容器进行排序
std::sort(nums.begin(), nums.end(), [](int a, int b){ return a < b; });

// 使用 lambda 表达式对容器中的元素进行遍历并输出
std::for_each(nums.begin(), nums.end(), [](int num){ std::cout << num << " "; });
Plain text

上述代码使用 lambda 表达式作为 std::sort 函数的第三个参数,指定了排序规则;另外,使用 lambda 表达式作为 std::foreach 函数的第二个参数,对容器中的每个元素执行特定的操作。

总结:lambda 表达式在 C++ 中有着广泛的应用,可以方便地定义匿名函数,并在多种场景下使用。它可以作为函数对象被赋值给变量,也可以转换为函数指针类型以便在其他函数中传递和调用。此外,lambda 表达式还可以与标准算法配合使用,提供灵活的算法实现。通过灵活运用 lambda 表达式,可以使 C++ 代码更加简洁、易读和高效。