C++里Lambda具体用法
时间: 2023-10-11 22:08:21 浏览: 113
Lambda表达式的一般形式如下:
```
[capture list] (parameters) -> return_type { function_body }
```
其中,`capture list`表示捕获列表,可以是空的,也可以包含一个或多个捕获项;`parameters`表示参数列表,可以为空,也可以包含一个或多个参数;`return_type`表示返回值类型,可以省略,编译器会自动推导;`function_body`表示函数体。
下面是一个Lambda表达式的例子:
```c++
auto lambda = [](int x, int y) -> int {
return x + y;
};
```
这个Lambda表达式定义了一个匿名函数对象,它接受两个整数参数x和y,并返回它们的和。使用`auto`关键字可以自动推导出Lambda表达式的类型。
Lambda表达式还可以通过捕获列表来捕获外部变量,例如:
```c++
int a = 10;
auto lambda = [a](int x, int y) -> int {
return a + x + y;
};
```
这个Lambda表达式捕获了变量a,并将其作为常量副本传递给Lambda函数体。在Lambda函数体内,可以使用捕获的变量,但不能修改它。
Lambda表达式还可以省略参数列表和返回值类型,例如:
```c++
auto lambda = [] {
cout << "Hello, world!" << endl;
};
```
这个Lambda表达式不接受任何参数,也不返回任何值,只是输出一条字符串。
Lambda表达式还可以作为函数对象传递给STL算法,例如:
```c++
vector<int> v = {1, 2, 3, 4, 5};
int sum = accumulate(v.begin(), v.end(), 0, [](int x, int y) {
return x + y;
});
```
这个Lambda表达式作为第四个参数传递给`accumulate`函数,用于计算向量`v`中所有元素的和。
阅读全文