c++stl deque

#include<iostream>
#include<deque>
using namespace std;
int main()
{
deque<int> a;
deque<int>::iterator it;
for(int i=2;i<=3;i++) a.push_back(i);
it=a.begin();
a.erase (it);
cout<<*it<<endl; //为什么*it 指向的还是a.begin()???
return 0;
}

这个和stl的实现有关,你这个写法的结果其实是未定的,和不同的stl库有关系。it被删除之后就被认为失效了,不能再进行访问了。当然被删除的那个内存是不一定马上被释放的,有执行效率上的考虑,而且erase并不会去修改你提供的iterator的值。一般是这么写 it = a.erase(it).
因为erase函数在vector, deque, list等顺序容器上都会返回被删除的元素之后的那个元素的iterator,如果删除的是容器中的最后一个元素,则返回end()的迭代器。
另外你说指向begin也不太确切,因为你删除过之后,begin的位置就变了。
温馨提示:答案为网友推荐,仅供参考
相似回答