由于vector是顺序容器,因此删除一个位于中间的元素会导致迭代器失效,影响效率。
对于保存在vector中的数据,如果数据本身对存储顺序没有要求,可以利用一个小技巧通过pop_back()来删除中间的元素。
代码如下:
for(size_t i = 0; i < vec.size(); ++i) { if(...) ///< 删除条件 { vec[i] = vec.back(); ///< vec[i]表示要删除的元素 vec.pop_back(); } }
本文介绍了一种在不关心顺序的情况下,如何高效地从vector中删除中间元素的方法。通过将待删元素替换为vector尾部元素并调用pop_back(),避免了因元素移动导致的迭代器失效问题。
由于vector是顺序容器,因此删除一个位于中间的元素会导致迭代器失效,影响效率。
对于保存在vector中的数据,如果数据本身对存储顺序没有要求,可以利用一个小技巧通过pop_back()来删除中间的元素。
代码如下:
for(size_t i = 0; i < vec.size(); ++i) { if(...) ///< 删除条件 { vec[i] = vec.back(); ///< vec[i]表示要删除的元素 vec.pop_back(); } }
转载于:https://www.cnblogs.com/coffeecat/archive/2012/11/22/2781901.html

被折叠的 条评论
为什么被折叠?