对vector删除元素的效率比较

eeeeelin 2018-04-24 05:18:39
最近在看github上的开源代码,看到了vector删除元素的操作,如(1)所示
(1)、先用swap把要删除的元素和vector里最后一个元素交换位置,然后把最后一个元素pop_back
std::swap(*it, observers_.back());
observers_.pop_back();

我平时删除vector上的元素跟(2)是一样的
(2)、先用find查找元素,然后用erase删除元素
Iterator it = std::find(observers_.begin(), observers_.end(), x);
observers_.erase(it);


各位大佬们觉得哪个效率高?讨论下,感觉(1)的效率高,比较机灵,因为vector删除中间元素的话,要把删除元素后的往前挪,不如把他挪到后面再删除。
...全文
1581 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-04-24
  • 打赏
  • 举报
回复
无profiler不要谈效率!
eeeeelin 2018-04-24
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
肯定1的效率高,2删除元素后需要把后面的元素依次向前移动,但有时会要求不能改变vector中元素顺序,此时只能使用2
有道理,如果排序不能乱的vector,不允许把最后一个元素跟删除元素交换位置
LN-Curiosity 2018-04-24
  • 打赏
  • 举报
回复
1效率高,频繁删除采用find delete可以用list。
starytx 2018-04-24
  • 打赏
  • 举报
回复
如果经常性删除的话我就不用vector了
paschen 版主 2018-04-24
  • 打赏
  • 举报
回复
肯定1的效率高,2删除元素后需要把后面的元素依次向前移动,但有时会要求不能改变vector中元素顺序,此时只能使用2

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧