文档目录

痛点:你有一段数据处理逻辑——筛选、转换、取前 N 个。传统写法会产生多个中间容器:

std::vector<int> data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

// 传统风格:产生两个临时 vector
std::vector<int> evens;
std::copy_if(data.begin(), data.end(), std::back_inserter(evens),
             [](int x) { return x % 2 == 0; });        // ① 分配 evens

std::vector<int> doubled;
std::transform(evens.begin(), evens.end(), std::back_inserter(doubled),
               [](int x) { return x * 10; });           // ② 分配 doubled

std::vector<int> top3;
std::copy_n(doubled.begin(), 3, std::back_inserter(top3)); // ③ 分配 top3

// 3 次分配、3 次遍历、3N 次拷贝

Ranges 的做法:

auto result = data
    | std::views::filter([](int x) { return x % 2 == 0; })
    | std::views::transform([](int x) { return x * 10; })
    | std::views::take(3);

// 0 次分配、1 次遍历、0 次多余拷贝

Ranges 的核心承诺:写出表达力强的代码,但不付出性能代价。