Использование remove_if - это «правильный» способ сделать это. Будьте осторожны, НЕ используйте итератор для циклического просмотра и удаления, потому что удаление элементов делает итератор недействительным. Фактически, любой пример, который использует erase () в качестве основного метода, является плохой идеей для векторов, потому что erase равен O (n), что сделает ваш алгоритм O (n ^ 2). Это должен быть алгоритм O (n).
Метод, который я приведу ниже, скорее всего будет быстрее, чем remove_if, но, в отличие от remove_if, НЕ сохранит относительный порядок элементов. Если вы заботитесь о поддержании порядка (т.е. ваш вектор отсортирован), используйте remove_if, как в ответе выше. Если вас не интересует порядок, и если количество элементов, которые нужно удалить, обычно меньше четверти вектора, этот метод скорее всего будет быстрее:
for( size_t i = 0; i < vec.size(); )
if( vec[i].isTiredOfLife() )
{
vec[i] = vec.back();
vec.pop_back();
}
else
++i;