vector::erase的效率如何

zhuzhuluoluo 2007-09-20 03:09:33
我想用vector<char>代替字符数组.
我的数组可能有100-10万个元素,
经常执行的操作是插一些元素到它的后面,
从头删除一些元素.

我担心的是:vector::erase效率如何?会不会把后面所有的元素向前移?

另外:我这种情况用vector<char>合适吗?谢谢
...全文
1427 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
星羽 2007-09-20
  • 打赏
  • 举报
回复 2
vector 其实就是一个动态数组,所以删除的时候会移动数据

效率极其低,但它的访问数度很好

如果你的数据不要求排序的话,

可以有个办法

把要删除的数据和最后一个数据交换,然后 pop 最后一个数据

这个很快了 - -
loops 2007-09-20
  • 打赏
  • 举报
回复
vc6下vector的iterator就是指针,
删除的时候不可能不向前移动元素了。
独孤过儿 2007-09-20
  • 打赏
  • 举报
回复
当数据量很大的时候,顺序的插入和删除效率非常低啊
fangrk 2007-09-20
  • 打赏
  • 举报
回复
根据你说得情况,deque好像更适合些
taodm 2007-09-20
  • 打赏
  • 举报
回复
还是看看《Effective STL》item 1吧,容器是要根据场合选取的,不是抓一个来就用的。
ckt 2007-09-20
  • 打赏
  • 举报
回复
使用deque效率好些吧
nkgd 2007-09-20
  • 打赏
  • 举报
回复
vector是连续内存容器,标准保证它的内存分配布局与标准C数组一样,你earse了其中一个元素,后面的显然会前移。
看你的需求,不如用deque
zhuzhuluoluo 2007-09-20
  • 打赏
  • 举报
回复
到底有没有问题啊?会不会移?
zhuzhuluoluo 2007-09-20
  • 打赏
  • 举报
回复
vector这么笨啊?
但是我要根据前面一些元素来判断是否要删除前面的这些元素,而我的判断函数是要求传进来的参数是一个数组
xugang_2001 2007-09-20
  • 打赏
  • 举报
回复
如果仅仅是100万个char应该没有多大的问题,写个简单的程序试验下就可以了,但是注意开发环境,因为有人碰到过类似问题,如果是使用VC6的话,超过了3万多点以后使用其中的sort等函数会导致错误,所以建议使用VS2005等高级版本,VC6过于陈旧了点,不建议使用。


///////////
我担心的是:vector:erase效率如何?会不会把后面所有的元素向前移?
效率没有任何问题的,不要担心
  • 打赏
  • 举报
回复
会不会把后面所有的元素向前移?
会的.
这种情况应该用queue

65,201

社区成员

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

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