C++17 引入的折叠表达式,有哪些应用场景,给我代码示例
时间: 2024-09-20 14:11:02 浏览: 32
C++17引入的折叠表达式(Fold Expression),也称为Lambda折算、折叠运算符或初始值求和,是一种强大的新特性,它允许你在一行代码内对容器进行迭代并应用某种操作,通常用于简化初始化列表、计算累加和或映射等场景。
折叠表达式的语法形式类似于`std::accumulate`函数,但可以直接应用于`auto&`变量。下面是一些应用场景的代码示例:
1. **累加求和**:
```cpp
int sum = std::ranges::fold(std::vector<int>{1, 2, 3, 4, 5}, 0, std::plus<>{}); // 结果为15
```
2. **数组初始化**:
```cpp
std::array<int, 5> arr = {std::initializer_list<int>{1, 2, 3, 4, 5} | std::views::transform(std::multiplies<int>())}; // 初始化为{1, 2, 3, 4, 5}
```
3. **字符串连接**:
```cpp
std::string result = "a" | std::ranges::views::join("bcde"); // result为"abcde"
```
4. **计算复杂表达式**:
```cpp
double average = (1.0 + 2.0 + 3.0) / 3; // 等同于 std::accumulate({1.0, 2.0, 3.0}, 0.0, std::plus<double>());
```