我知道擦除會自動將迭代器向前移動,所以當刪除多次出現時,我需要避免這種情況,以便我可以比較連續的元素。這就是爲什麼我通常做的:C++ 11:從矢量中刪除多個事件。最佳做法是什麼?
auto i = vect.begin();
while (i!=vect.end())
if (*i==someValue)
vect.erase(i);
else
++i;
但我在想,如果我還可以用它做for循環,就像這樣:
for (auto i=vec.begin(); i!=vec.end(); ++i)
if (*i==someValue){
vec.erase(i);
--i;
}
的--i部分看起來有點怪異,但它的工作原理。這是不好的做法嗎?錯誤的代碼?容易出錯?或者使用其中一種選擇恰到好處?
謝謝。
很確定他們都不可靠。做到這一點:https://stackoverflow.com/questions/3938838/erasing-from-a-stdvector-while-doing-a-for-each – Ryan
他們爲什麼不可靠?如果它是正確的,我寧願堅持我的選擇。然而,我不知道爲什麼它不正確(除了需要分配'i = vect.erase(i)'來防止迭代器失效。 –