2013-12-22 110 views
1

我在調試模式下運行我的代碼,程序彈出一個斷言失敗的消息。請幫我找出哪個部分導致這個斷言失敗。 :{爲什麼向量拋出這個斷言失敗的警報?

Debug Assertion Failed! 
Expression: vector iterators incompatible 

代碼:

int main() 
{ 
vector<int> a(5); 
fill(a.begin(), a.end(), 5); 
a[2] = 3; 
a[1] = 2; //so now a = {5,2,3,5,5} 

auto it = a.begin(); 
for (; it != a.end();) 
{ 
    if (*it == 5) 
     a.erase(it); //Remove 5 
    else 
     it++; 
} 
copy(a.begin(), a.end(), ostream_iterator<int>(cout, "\n")); 
} 
+0

順便說一句,如果您使用擦除刪除語言,'std :: remove'已經做到了這一點。 – chris

回答

5

當刪除迭代過程中擦除迭代器將變爲(和其他可能成爲)無效:

讓它:

IT =一個。擦除(它);

相關問題