我正在寻找从向量中删除多个项目的最有效方法?
基本上,我将在向量中搜索一个标记,并删除和具有该标记的对象。
但是,我听说从向量中删除对象会弄乱您的迭代器,那么循环遍历向量(可能包含数千个对象)并删除带有特定标志的对象的最有效方法是什么?
我希望不必多次遍历向量。
如果有多个元素与标志匹配,则应使用std::remove_if()
:
vec.erase(std::remove_if(vec.begin(), v.end(), [](T const& e){ return e.flag(); }),
v.end());
使用此方法最多可将每个向量元素移动一次。删除单个元素可能会使每个元素移动一次O(n)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句