如何将C++ std::views::iota生成无穷序列与20视图库进阶操作结合进行实战应用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计889个文字,预计阅读时间需要4分钟。
它生成的结果是:
必须加终结适配器,常见组合有:
-
std::views::iota(0) | std::views::take(n)—— 取前 n 个,最常用 std::views::iota(0) | std::views::drop_while([](int x) { return x —— 找第一个 ≥100 的数-
std::views::iota(0) | std::views::filter([](int x) { return x % 2 == 0; }) | std::views::take(5)—— 取前 5 个偶数
std::views::iota(start, end) 的区间语义容易误读
它生成的是左闭右开区间 [start, end),不是 [start, end]。例如 std::views::iota(0, 5) 输出是 0 1 2 3 4,共 5 个元素,不是 6 个。
本文共计889个文字,预计阅读时间需要4分钟。
它生成的结果是:
必须加终结适配器,常见组合有:
-
std::views::iota(0) | std::views::take(n)—— 取前 n 个,最常用 std::views::iota(0) | std::views::drop_while([](int x) { return x —— 找第一个 ≥100 的数-
std::views::iota(0) | std::views::filter([](int x) { return x % 2 == 0; }) | std::views::take(5)—— 取前 5 个偶数
std::views::iota(start, end) 的区间语义容易误读
它生成的是左闭右开区间 [start, end),不是 [start, end]。例如 std::views::iota(0, 5) 输出是 0 1 2 3 4,共 5 个元素,不是 6 个。

