【发布时间】: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 以获得有效的方法。