auto pipeline = data
| std::views::filter([](int x) { return x % 2 == 0; })
| std::views::transform([](int x) { return x * 10; })
| std::views::take(3);
for (int x : pipeline) {
std::cout << x;
}
for 循环中每次迭代发生了什么:
第 1 次迭代:
take 问 transform:"给我下一个值"
transform 问 filter:"给我下一个值"
filter 问 data:"给我下一个值"
data 给 filter:1 → filter 检查 1%2==0?→ false → "跳过,下一个"
data 给 filter:2 → filter 检查 2%2==0?→ true → 把 2 给 transform
transform 计算 2*10=20 → 把 20 给 take
take 计数 1/3 → 把 20 吐给 for 循环
cout << 20
第 2 次迭代:
take 问 transform:再给我一个
transform 问 filter:再给我一个
data 给 filter:3 → false → 跳过
data 给 filter:4 → true → transform → 40 → take(2/3) → cout
第 3 次迭代:
同样得到 60 → 输出
take 计数到达 3 → 告诉 for:"结束了"
总共遍历了 data 的前 6 个元素(到 6),而非全部 data。
关键:每次只处理一个元素通过整个管道,管道中的每个"站"都是按需工作。最坏情况下只遍历 data 一遍。