You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过C++23 ranges::elements_of拼接多个iota_view生成数字序列?

C++23生成器实现双范围拼接的修改方案

首先修正你代码里的问题,同时完成双范围拼接的需求:

完整修改后的代码

#include <generator>
#include <ranges>

std::generator<size_t> GenerateSequence(size_t start1, size_t end1, size_t start2, size_t end2)
{
    // 生成第一组连续序列:[start1, end1)
    co_yield std::ranges::elements_of(std::ranges::iota_view{start1, end1});
    // 生成第二组连续序列:[start2, end2)
    co_yield std::ranges::elements_of(std::ranges::iota_view{start2, end2});
}

关键修改点说明

  • 修正参数名错误:原代码误用了start和end,替换为函数参数对应的start1、end1,确保第一组范围正确。
  • 添加第二组范围的生成逻辑:新增一条co_yield std::ranges::elements_of(...)语句,传入第二个iota_view即可实现两个范围的拼接——生成器会按顺序输出第一组所有元素,再输出第二组所有元素。
  • 调整generator的模板参数:原代码用const size_t&存在悬空引用风险,iota_view生成的是临时值,返回引用会导致调用方访问无效内存。改为直接返回size_t值类型,符合C++23生成器的最佳实践。

使用示例

你可以这样调用验证效果:

#include <iostream>

int main()
{
    for (auto num : GenerateSequence(1, 4, 6, 9))
    {
        std::cout << num << ' ';
    }
    // 输出:1 2 3 6 7 8
    return 0;
}

内容的提问来源于stack exchange,提问作者khteh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:02:21