社区
C++ 语言
帖子详情
vector::erase的效率如何
zhuzhuluoluo
2007-09-20 03:09:33
我想用vector<char>代替字符数组.
我的数组可能有100-10万个元素,
经常执行的操作是插一些元素到它的后面,
从头删除一些元素.
我担心的是:vector::erase效率如何?会不会把后面所有的元素向前移?
另外:我这种情况用vector<char>合适吗?谢谢
...全文
1427
11
打赏
收藏
vector::erase的效率如何
我想用vector代替字符数组. 我的数组可能有100-10万个元素, 经常执行的操作是插一些元素到它的后面, 从头删除一些元素. 我担心的是:vector::erase效率如何?会不会把后面所有的元素向前移? 另外:我这种情况用vector合适吗?谢谢
复制链接
扫一扫
分享
转发到动态
举报
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效率如何?会不会把后面所有的元素向前移?
效率没有任何问题的,不要担心
珍惜生命远离CPP
2007-09-20
打赏
举报
回复
会不会把后面所有的元素向前移?
会的.
这种情况应该用queue
c++之
vector
容器
erase
操作
c++之
vector
容器
erase
操作,在容器列表中删除中间一行的操作过程,代码分为一维容器和二维容器操作两部分,详细见代码
vector
中删除元素
erase
的用法
erase
的用法删除
vector
中特定的元素。非常简单实用。
c++ std::
vector
的
erase
的思考
首先说明一下,c++20提供了std::
erase
的接口了,对于删除
vector
的指定元素,还是优先应该考虑使用这个接口。这里说的是c++20以前的版本。简单改一下会更加的好,从后往前遍历。可以从rbegin开始来删除(最好不要这样去实现)。这个代码可以运行,而且没有错误,能够正确删除元素,但是他的
效率
并不高(因为移动的数据一定比从后往前删除的时候移动的数据多)1.在删除的时候,我写代码惯性使用下列代码了。MSVC编辑器有运行错误,不允许比首地址小。MSVC的代码要如下。
使用
vector
::
erase
正确做法是:std::list List;std::list::iterator itList;for( itList = List.begin(); itList != List.end(); ){ if( WillDelete( *itList) ) { itList = List.
erase
( itList); } else
vector
erase
和remove辨析
这里写自定义目录标题std::remove 位于 \std::remove 位于 <algorithm> std::
vector
::
erase
位于<
vector
> 两者字面意思都是删除(清除),但是实际操作上却有很大的差别。 iterator
erase
(const_iterator position):删除指定迭代器位置的元素,返回删除位置后一个位置的迭代器。 iterator
erase
(const_iterator first, const_iterator last):
C++ 语言
65,201
社区成员
250,521
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章