从矢量中删除项目

use*_*405 0 c++ performance vector

我正在寻找从矢量中删除多个项目的最有效方法?

基本上我将在向量中搜索一个标志并删除具有该标志的对象.

不过,我听说从向量会搞乱删除对象的迭代器,所以什么是最有效的方式来循环虽然矢量(含潜在的成千上万个对象),并删除那些有特定的标志?

我希望不必多次遍历向量.

Die*_*ühl 5

如果有多个元素匹配您应该使用的标志std::remove_if():

vec.erase(std::remove_if(vec.begin(), v.end(), [](T const& e){ return e.flag(); }),
          v.end());
Run Code Online (Sandbox Code Playgroud)

使用此方法最多移动每个向量元素一次.删除单个元素可能会移动每个元素O(n).