Помимо принятого ответа и уточнения ответа slavy13 -
( РЕДАКТИРОВАТЬ - и, как упоминал Джош, не имеет прямое отношение к этому вопросу - я оставляю его здесь для справки).
Код (но не этот код) иногда предполагает, что вы можете удалить элементы из вектора и продолжать итерацию. Это ложное предположение - после удаления элемента из вектора все другие итераторы, следующие за удаленным элементом, становятся недействительными - вы больше не можете предполагать, что они верны, и если вы продолжите их использовать, могут произойти «плохие вещи».
Причина этого в том, что вектор на самом деле хранит информацию в виде массива. Когда элемент удаляется, все последующие элементы копируются на одну ячейку вниз. Соответственно, итераторы не обновляются.
Настоятельно рекомендуется обращаться к документации STL всякий раз, когда пытаетесь делать такие вещи, потому что вполне возможно, что такой код будет работать случайно на одной реализации STL, но не работать на других.