[英]why does my program crash when I delete a member of std::vector
我有一個像下面的向量
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";
但是在比較表達式中,我的程序崩潰了。 為什么?
簡而言之,因為在調用erase()
之后,指向向量中已擦除位置或更高位置的所有迭代器都是無效的。 參見,例如, 此處的官方文檔。
因為用erase()
使擦除點和之后的迭代器無效。
OTOH,返回值是一個迭代器,該迭代器指向已刪除元素之后的元素,因此您可以像這樣進行操作:
it = myvector.erase(it);
if (it == myvector.end()) { ... }
被擦除元素的位置和向量的結尾之間的迭代器通過erase()
無效。 看這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.