0

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

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";

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

4

4 回答 4

6

简单来说,因为在调用 之后erase(),所有指向向量中被擦除位置或后面位置的迭代器都是无效的。例如,请参阅此处以获取有关此内容的官方文档。

于 2012-08-07T12:30:36.810 回答
5

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

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

it = myvector.erase(it);
if (it == myvector.end()) { ... }
于 2012-08-07T12:30:58.283 回答
2

你不应该在擦除它时增加'i',因为擦除返回下一个有效的迭代器

我认为这可能会回答您的问题

https://stackoverflow.com/a/4645727/623546

于 2012-08-07T12:34:34.053 回答
1

被擦除元素的位置和向量末尾之间的迭代器被erase(). 见这里

于 2012-08-07T12:32:21.937 回答