C++11 Lambda代码及讲解
时间: 2024-05-03 22:18:05 浏览: 9
Lambda表达式是C++11引入的一个重要特性,它能够在函数内部定义匿名函数,使得代码更加简洁、易读。下面是一个简单的Lambda表达式的示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> nums = {10, 20, 30, 40, 50};
// 使用Lambda表达式打印nums中的所有元素
std::for_each(nums.begin(), nums.end(), [](int num) { std::cout << num << " "; });
return 0;
}
```
上述代码使用了`std::for_each`算法,该算法可以依次对容器中的每个元素执行某个操作。其中,Lambda表达式`[](int num) { std::cout << num << " "; }`定义了一个匿名函数,该函数接受一个`int`型参数`num`,并将该参数输出到控制台上。
Lambda表达式的一般形式如下:
```c++
[capture list](parameter list) -> return type { function body }
```
其中,`capture list`指的是Lambda表达式的捕获列表,用于捕获外部变量。`parameter list`指的是Lambda表达式的参数列表,可以为空。`return type`指的是Lambda表达式的返回类型,可以为空,如果不为空,则必须在`function body`中包含一条`return`语句。`function body`指的是Lambda表达式的函数体,用于定义Lambda表达式要执行的操作。
Lambda表达式还支持一些特殊的语法,例如:
- `[&]`表示以引用方式捕获所有外部变量;
- `[=]`表示以值方式捕获所有外部变量;
- `[this]`表示以值方式捕获当前对象的指针。
下面是一个Lambda表达式的示例代码,演示了如何使用Lambda表达式对容器中的元素进行排序:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> nums = {50, 30, 10, 40, 20};
// 使用Lambda表达式对nums进行排序
std::sort(nums.begin(), nums.end(), [](int a, int b) { return a < b; });
// 打印排序后的结果
std::for_each(nums.begin(), nums.end(), [](int num) { std::cout << num << " "; });
return 0;
}
```
上述代码中,Lambda表达式`[](int a, int b) { return a < b; }`定义了一个比较函数,用于指定排序规则。该函数接受两个`int`型参数`a`和`b`,并返回一个`bool`值,表示`a`是否应该排在`b`之前。
Lambda表达式是C++11引入的一个重要特性,它使得函数定义更加灵活、简洁,同时还能够提高代码的可读性和可维护性。