2013-12-22 5 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

При удалении во время итерации стертый итератор становится (и другие могут стать) недействительными:

Сделать это:

это = а. стереть);

Смежные вопросы