可能重複:
Can you remove elements from a std::list while iterating through it?STL列表中刪除項目
我想從列表中刪除項目,而迭代。我之前做過這個,但不知怎的,這個簡單的例子讓我失望了。 thnx提前幫助!
#include<iostream>
#include<list>
using namespace std;
void main()
{
list<int> x;
for (int i =0;i<10; i++)
x.push_back(i);
for(list<int>::iterator k = x.begin(); k != x.end();k++)
cout<<*k<<" ";
cout<<endl;
for(list<int>::iterator k = x.begin(); k != x.end();k++)
{
if ((*k)%2)
{
x.erase(k);
}
}
cout<<endl;
getchar();
}
2人輕傷尼特)K ++是更好的那++ K(作爲一種習慣)。特別是複雜的類型(按照Scott Myers)。 B)我總是評論爲什麼我離開了在增量爲 – pm100 2010-10-05 18:48:20
@ PM100「K ++是更好的那++ K(作爲一種習慣)」 - 我認爲這是真的打碼機偏好,除非你正在處理的副作用的問題。但是就其本身而言,++ k或k ++都可以。我其實更喜歡第一種方式。 – dcp 2010-10-05 18:51:29
@dcp:在特定的迭代器其實是可以有PERF的影響,因爲後綴版本實際上有做迭代器的副本,以及一些迭代器是「胖」,以至於編譯器不能充分優化是走內聯後。在這種特殊情況下,它很可能會發生,但是正如pm100所說,作爲_habit_,使用迭代器是很好的選擇。 – 2010-10-05 18:59:34