【问题标题】:Is there any standard variadic function for erasing multiple elements in a vector?是否有用于擦除向量中多个元素的标准可变参数函数?
【发布时间】:2022-12-04 07:52:04
【问题描述】:

拿这个向量:

std::vector<int> v = {1, 2, 3, 4, 5};

假设我想删除某个向量中任意索引处的一些元素:0、1 和 3。必须这样写是很乏味的:

v.erase(v.begin());
v.erase(v.begin());
v.erase(v.begin() + 1);

是否有任何标准函数接受任意数量的索引以从向量中删除?像这样:v.erase(0, 1, 3);

【问题讨论】:

  • 不,没有。
  • 没有什么可以阻止您编写执行此操作的 multi_erase 函数,也许使用 inspiration from this
  • 我假设您可能根据某些条件从某处获取索引 (0, 1, 3)。在这种情况下,更好的选择是使用erase_if
  • 如果您以相反的顺序对索引列表进行排序,则可以遍历列表并删除每个索引。易于编写的功能。请参阅 remove-erase idiom 以获得有效的方法。

标签: c++ vector


【解决方案1】:

是和不是。

没有什么可以处理指数的。也没有任何内容可以处理任意元素。

但是您可以一次擦除构成连续范围的多个项目。因此,您可以将对 erase 的前两次调用合并为一个(并且可能使该过程的速度提高一倍)。

// erase the first two elements
v.erase(v.begin(), v.begin() + 2);

【讨论】:

    【解决方案2】:

    如果你想删除前三个元素,那么你可以运行。

      std::vector<int> v = {1, 2, 3, 4, 5};
        v.erase(v.begin(),v.begin()+3);
    

    或者,

    v.erase(v.begin(),v.end()-2);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      相关资源
      最近更新 更多