Не делай этого. Используйте хороший встроенный std::remove_if
.
vectorName.erase(std::remove_if(vectorName.begin(), vectorName.end(), [](const auto& i){return condition;}),
vectorName.end());
erase
имеет решающее значение, потому что remove_if
не меняет размер контейнера. Он просто возвращает новый конец (так что он может работать с любым диапазоном, а не только с целыми контейнерами). Это называется стирание-удаление идиома .
Ваш подход гораздо сложнее использовать, потому что удаление элемента из вектора делает недействительными все итераторы . Это означает, что после удаления одного элемента вы не сможете продолжать в том же цикле на основе диапазона.