¿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é?