C++的lambda表达式怎么使用
时间: 2024-09-11 19:02:48 浏览: 55
C++的lambda表达式是一种定义匿名函数对象的方法,它可以捕获作用域中的变量,并在需要时使用。Lambda表达式通常用于需要函数对象的场合,如STL算法的回调函数等。其基本语法如下:
```cpp
[外部变量捕获列表] (参数列表) mutable 异常规范 -> 返回类型 {
// 函数体
}
```
其中各部分含义如下:
- 外部变量捕获列表:用于指定lambda表达式可以访问的作用域中的外部变量。可以是值捕获(`[=]`)或引用捕获(`[&]`)。
- 参数列表:定义lambda表达式的参数,与普通函数参数列表类似。
- mutable:表示可以修改通过值捕获的外部变量,因为默认情况下是const。
- 异常规范:定义lambda表达式是否会抛出异常。
- 返回类型:lambda表达式的返回类型,可以省略,编译器会自动推导。
下面是一个简单的例子:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
int a = 10;
// 使用lambda表达式打印所有元素
std::for_each(vec.begin(), vec.end(), [](int x) {
std::cout << x << " ";
});
std::cout << std::endl;
// 使用lambda表达式对每个元素加a的值
std::for_each(vec.begin(), vec.end(), [a](int& x) {
x += a;
});
// 再次打印修改后的元素
std::for_each(vec.begin(), vec.end(), [](int x) {
std::cout << x << " ";
});
std::cout << std::endl;
return 0;
}
```
在这个例子中,第一个lambda表达式简单地打印出向量中的每个元素。第二个lambda表达式则捕获了变量`a`的值,并通过引用修改了向量`vec`中的每个元素。
阅读全文