【发布时间】:2014-05-24 18:44:53
【问题描述】:
我正在寻找从向量中删除多个项目的最有效方法?
基本上,我将在向量中搜索一个标志并删除具有该标志的对象。
但是,我听说从向量中擦除对象会弄乱您的迭代器,那么循环遍历向量(可能包含数千个对象)并删除带有特定标志的对象的最有效方法是什么?
我希望不必多次循环遍历向量。
【问题讨论】:
-
std::remove_if. -
如何不弄乱迭代器:
iterator = vector.erase(iterator); -
向量中项目的顺序是否重要?如果没有,每当您遇到要删除的向量中的项目时,将该项目设置为等于向量中的最后一项,然后在向量上调用 pop_back()。通过这样做,您可以在 O(N) 时间内从向量中删除任意数量的项目。 (请注意,它确实会改变项目的顺序,所以如果这是一个问题,请改用 std::remove_if())
标签: c++ performance vector