¿Existe una alternativa mejor a std :: remove_if para eliminar elementos de un vector?

La tarea de eliminar elementos con una determinada propiedad de unstd::vector u otro contenedor se presta a una implementación de estilo funcional: ¿Por qué molestarse con bucles, desasignación de memoria y mover datos correctamente?

Sin embargo, la forma estándar de hacer esto en C ++ parece ser la siguiente expresión:

std::vector<int> ints;
...
ints.erase(
    std::remove_if(ints.begin(), 
                   ints.end(),
                   [](int x){return x < 0;}),
    ints.end());

Este ejemplo elimina todos los elementos menores que cero de un vector entero.

Lo encuentro no solo feo sino también fácil de usar incorrectamente. Está claro questd::remove_if no puede cambiar el tamaño del vector (como su nombre lo sugiere) porque solo pasa los iteradores. Pero muchos desarrolladores, incluyéndome a mí, no entienden eso al principio.

Entonces, ¿hay una forma más segura y con suerte más elegante de lograr esto? Si no, ¿por qué?

Respuestas a la pregunta(2)

Su respuesta a la pregunta