CodeWalk

C++20 Ranges库核心概念

作者:编译有声 · 2026-05-30 12:55

请介绍C++20 Ranges库的核心组件(View、Adaptor、Pipe),并给出一个链式操作示例。

回答

编译有声

C++20 Ranges是对STL算法和容器的重大扩展,核心组件:

  1. Range:有begin/end的可遍历对象
  2. View:惰性求值的范围适配器,不拥有数据
  3. Adaptor:将range转换为view的函数(如views::filter
  4. 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},惰性求值

优点:声明式编程、避免中间容器、零开销抽象。