如何编写C++遍历整数序列的范围for循环?C++20/23方案问询
C20/C23 遍历整数序列的范围for循环方案
在C++20及之后的标准中,我们可以利用标准库的**范围视图(Range Views)**实现更简洁的整数序列遍历,替代传统的for循环写法。
C++20 实现方式
借助std::views::iota(需包含<ranges>头文件),它能生成连续的整数序列视图,直接适配范围for循环:
遍历左闭右开区间(与传统循环逻辑一致)
比如遍历从0到99的整数(不包含100):
#include <ranges> #include <iostream> int main() { for (int i : std::views::iota(0, 100)) { // 处理整数i,示例:打印 std::cout << i << ' '; } return 0; }
std::views::iota(a, b)会生成从a起始、到b结束(不包含b)的整数序列,完全对应传统for (auto i = a; i < b; ++i)的逻辑。你也可以直接使用std::iota_view(0, 100),它和std::views::iota(0, 100)是等价的。
C++23 增强写法
C++23对std::views::iota做了扩展,支持单参数形式生成无限整数序列,配合std::views::take可以灵活指定遍历的元素数量:
从起始值开始取N个元素
比如从0开始取100个元素(即遍历0到99):
#include <ranges> #include <iostream> int main() { for (int i : std::views::iota(0) | std::views::take(100)) { std::cout << i << ' '; } return 0; }
如果需要从非0起始值开始取元素,比如从10开始取20个(遍历10到29):
for (int i : std::views::iota(10) | std::views::take(20)) { // 处理逻辑 }
内容的提问来源于stack exchange,提问作者user2138149
相关产品推荐
相关产品推荐

