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

C++中如何移除range范围内指定位置的第N个元素?

移除Range指定索引元素的实现方案

使用ranges-v3库实现

你可以选择两种常用实现方式:

  • 视图拼接法(性能最优,无额外遍历判断开销)
    直接截取索引3之前的元素,拼接索引4及之后的元素,刚好跳过索引3的位置:
    my_range | ranges::views::take(3) | ranges::views::concat(ranges::views::drop(4))
    
  • 索引过滤法(灵活适配多索引删除的场景)
    配合enumerate视图获取每个元素的索引,过滤后提取值即可:
    my_range | ranges::views::enumerate
             | ranges::views::filter([](auto const& elem) { return elem.first != 3; })
             | ranges::views::values
    

使用C++标准库实现

C++23及以上版本

C++23标准库已经内置了enumerate、concat等视图,和ranges-v3的用法基本一致:

  • 视图拼接法:
    my_range | std::views::take(3) | std::views::concat(std::views::drop(4))
    
  • 索引过滤法:
    my_range | std::views::enumerate
             | std::views::filter([](auto const& elem) { return elem.first != 3; })
             | std::views::values
    

C++20版本

C++20标准库未内置enumerate和concat,可以用捕获索引计数器的方式简单实现:

int idx = 0;
auto res = my_range | std::views::filter([&idx](auto const& val) {
    return idx++ != 3;
});

注意:该方法仅适用于单遍历场景,多次遍历该视图会导致索引计数错乱,如需多遍历安全的实现建议引入ranges-v3库或升级到C++23版本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:27:01