簡體   English   中英

為什么刪除std :: vector成員時我的程序崩潰

[英]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()) { ... }

您不應在擦除時增加'i',因為擦除會返回下一個有效的迭代器

我認為這可能會回答您的問題

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

被擦除元素的位置和向量的結尾之間的迭代器通過erase()無效。 這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM