C++11中怎么使用lambda
时间: 2024-01-18 12:03:18 浏览: 25
在C++11中,可以使用lambda表达式来定义一个匿名函数。Lambda表达式通过方便的方式,将函数对象的定义和使用结合在一起,非常适合用于一些简单的函数对象的定义。
Lambda表达式的语法如下:
```
[capture](parameters)->return_type{body}
```
其中:
- `capture`表示捕获列表,用于捕获上下文中的变量。
- `parameters`表示参数列表,表示该lambda表达式所接受的参数。
- `return_type`表示返回类型,可以省略,表示由编译器自动推断。
- `body`表示函数体,表示该lambda表达式所执行的操作。
例如,下面的代码定义了一个lambda表达式,用于计算两个整数的和:
```c++
auto sum = [](int a, int b) -> int { return a + b; };
cout << sum(1, 2) << endl; // 输出3
```
在lambda表达式中,我们可以使用`[]`来指定捕获列表,其中包括:
- `[]`:不捕获任何变量。
- `[&]`:以引用的方式捕获所有变量。
- `[=]`:以值的方式捕获所有变量。
- `[a, &b]`:以值的方式捕获变量a,以引用的方式捕获变量b。
- `[&a, b]`:以引用的方式捕获变量a,以值的方式捕获变量b。
例如,下面的代码定义了一个lambda表达式,捕获了外部变量a和b,并以值的方式进行捕获:
```c++
int a = 1, b = 2;
auto sum = [a, b]() -> int { return a + b; };
cout << sum() << endl; // 输出3
```
Lambda表达式还可以作为函数参数进行传递,例如:
```c++
void print(int n, function<int(int)> func) {
for (int i = 1; i <= n; i++) {
cout << func(i) << " ";
}
cout << endl;
}
int main() {
int n = 5;
print(n, [](int x) -> int { return x * x; }); // 输出1 4 9 16 25
return 0;
}
```
在上面的代码中,我们定义了一个`print`函数,接受一个整数`n`和一个函数对象`func`作为参数。在`main`函数中,我们调用`print`函数,并将一个lambda表达式作为`func`参数传递进去,该lambda表达式接受一个整数参数并返回其平方。最终,`print`函数会输出1 4 9 16 25。