deque的插入和删除操作会使迭代器失效么


STL容器deque,向其中一个位置插入一个元素和删除一个位置上的元素底层是怎么实现的?操作后会使得其他位置上的迭代器失效吗?

STL(C++) C++

sign情 11 years, 5 months ago

会的,任何的插入和删除操作都会是deque的迭代器失效。必须重新获取才可以是用的
----------------------对于说不失效的解答--------------------

   
  #include <iostream>
  
#include <deque>
int main(int argc, char *argv[])
{
deque<int> iDeque;
deque<int>::iterator iter;
int i = 0;
while (i < 10)
{
iDeque.push_back(i);
++i;
}

iter = iDeque.begin();
iDeque.push_front(20);
std::cout<<*iter;//崩溃掉

system("PAUSE");
return 0;
}

认为插入或者删除不会导致迭代器失效的同学。可以运行这段代码,在我注释的那段会崩溃掉。无论是STL源码剖析4.4节说了什么,但是确实崩了,也就是说,迭代器失效了。

请输入图片描述

崩溃信息里面说的比较明确
expression:deque iterator not dereferencable
deque的迭代器不可引用

今晚操你妹 answered 11 years, 5 months ago

Your Answer