当我删除std :: vector的成员时,为什么我的程序崩溃了

her*_*ian 0 c++ stl

我有一个像下面这样的矢量

vector<unsigned int> myvector;
vector<unsigned int>::iterator it;

//fill it 
for (i=1; i<=10; i++) myvector.push_back(i);

//I want delete first one 
it = myvector.begin();
myvector.erase(it++);

//I want to know if I am in last element
if(it != myvector.end()) 
      cout << "a test";
Run Code Online (Sandbox Code Playgroud)

但在比较表达式中,我的程序崩溃了.为什么?

Ern*_*ill 5

简单地说,因为在调用之后erase(),指向擦除位置的所有迭代器或向量中的后续位置都是无效的.例如,请参阅此处的官方文档.


jro*_*rok 5

因为erase()在擦除点和擦除点之后使迭代器无效。

OTOH,返回值是一个迭代器,它指向擦除后的元素,所以你可以这样做:

it = myvector.erase(it);
if (it == myvector.end()) { ... }
Run Code Online (Sandbox Code Playgroud)