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

如何用C++ ranges/views简化跳过范围中指定单个元素的代码?

跳过单指定位置元素的C++ Ranges简洁实现

要实现从范围中仅跳过一个指定位置元素的功能,你可以直接将两个子范围的临时组合传递给std::views::join,省去中间变量src,代码会更紧凑:

#include <iostream>
#include <ranges>
#include <vector>

int main()
{
    std::vector<int> values = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    const int skip_pos = 5;

    auto seq = std::views::join(std::initializer_list{
        values | std::views::take(skip_pos),
        values | std::views::drop(skip_pos + 1)
    });

    for (auto& v : seq) {
        std::cout << v << " ";
    }
}

补充说明

  • 上述代码通过std::initializer_list直接打包take(skip_pos)和drop(skip_pos+1)生成的两个视图,再用std::views::join合并为连续范围,完全无需额外中间变量。
  • 如果你的开发环境支持C++23,还可以用更直观的std::views::concat替代join,进一步提升代码可读性:
    auto seq = std::views::concat(
        values | std::views::take(skip_pos),
        values | std::views::drop(skip_pos + 1)
    );
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:17:11