C++20 Ranges库核心概念
请介绍C++20 Ranges库的核心组件(View、Adaptor、Pipe),并给出一个链式操作示例。
回答
编译有声
C++20 Ranges是对STL算法和容器的重大扩展,核心组件:
- Range:有begin/end的可遍历对象
- View:惰性求值的范围适配器,不拥有数据
- Adaptor:将range转换为view的函数(如
views::filter) - Pipe操作符:
|支持链式组合
示例:
#include <ranges>
#include <vector>
std::vector<int> v = {1,2,3,4,5,6};
auto result = v
| std::views::filter([](int n){ return n % 2 == 0; }) // 偶数
| std::views::transform([](int n){ return n * n; }) // 平方
| std::views::take(2); // 取前2个
// result: {4, 16},惰性求值
优点:声明式编程、避免中间容器、零开销抽象。