---------------------------问个STL问题。已知一个下标,从LIST里直接删除它,其中找到的复杂度是多少?

lin_style 2011-07-26 09:03:25
看了很多都是BEGIN---END的循环,找到后删除,这个很慢,
有没更快的?find??


如果没有只好自己写个数组+链表,删除直接偏移到位置
...全文
307 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Michael_Xie 2011-07-27
  • 打赏
  • 举报
回复
去看看有些什么接口吧
http://www.cplusplus.com/reference/stl/deque/
lin_style 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pengzhixi 的回复:]

你看的是queue不是deque,deque都支持[]下标操作
[/Quote]

打工去了,回来再看。不过删除的代码里似乎看到了copy的字样哦
lin_style 2011-07-27
  • 打赏
  • 举报
回复
vector.erase(begin()+pos),删除好慢啊好慢,不做点手脚的话,release下的速度起码慢了十倍
pengzhixi 2011-07-27
  • 打赏
  • 举报
回复
你看的是queue不是deque,deque都支持[]下标操作
Michael_Xie 2011-07-27
  • 打赏
  • 举报
回复
deque,vector,string在pos插入和删除时所用的查找时间复杂度都是O(1),但是有可能导致大量的数据移动,总体效率不高。
lin_style 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]

好吧 deque的实现就是你说的。
[/Quote]
不会的大侠,偶会结贴的。。

我看了下deque,只有两个接口,push和pop,好像根据不了pos操作呢


[Quote=引用 4 楼 michael_xie 的回复:]

那得看是什么样的容器,像deque,vector,string删除pos位置的元素,其查找的时间复杂度都是O(1)的,list就是O(n)了,map和set就是O(logN)了。
[/Quote]

vector我看到这样段代码:
	void _Orphan_range(pointer _First, pointer _Last) const
{ // orphan iterators within specified (inclusive) range
_Lockit _Lock(_LOCK_DEBUG);
const_iterator **_Pnext = (const_iterator **)&this->_Myfirstiter;
while (*_Pnext != 0)
if ((*_Pnext)->_Myptr < _First || _Last < (*_Pnext)->_Myptr)
_Pnext = (const_iterator **)&(*_Pnext)->_Mynextiter;
else
{ // orphan the iterator
(*_Pnext)->_Mycont = 0;
*_Pnext = (const_iterator *)(*_Pnext)->_Mynextiter;
}
}

删除有遍历吧?


其实我想要的就是,插入O(1),根据pos删除,也是O(1).现成容器有解?
rendao0563 2011-07-26
  • 打赏
  • 举报
回复
有删除需求建议用多map组合
至善者善之敌 2011-07-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 michael_xie 的回复:]
那得看是什么样的容器,像deque,vector,string删除pos位置的元素,其查找的时间复杂度都是O(1)的,list就是O(n)了,map和set就是O(logN)了。
[/Quote]

++1
不是排序,只是查找的会用DEQUE,时间是常量,最快
Michael_Xie 2011-07-26
  • 打赏
  • 举报
回复
那得看是什么样的容器,像deque,vector,string删除pos位置的元素,其查找的时间复杂度都是O(1)的,list就是O(n)了,map和set就是O(logN)了。
bdmh 2011-07-26
  • 打赏
  • 举报
回复
deque支持随机访问,提供c.erase(pos)方法,删除指定下标元素
pengzhixi 2011-07-26
  • 打赏
  • 举报
回复
情况不对,不是2分了。完了,估计这家伙以后发帖是0分了。
pengzhixi 2011-07-26
  • 打赏
  • 举报
回复
好吧 deque的实现就是你说的。

64,650

社区成员

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

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