Existe uma alternativa melhor ao std :: remove_if para remover elementos de um vetor?
A tarefa de remover elementos com uma determinada propriedade de umstd::vector
ou outro contêiner se presta a uma implementação de estilo funcional: Por que se preocupar com loops, desalocação de memória e movimentação de dados corretamente?
No entanto, a maneira padrão de fazer isso no C ++ parece ser o seguinte idioma:
std::vector<int> ints;
...
ints.erase(
std::remove_if(ints.begin(),
ints.end(),
[](int x){return x < 0;}),
ints.end());
Este exemplo remove todos os elementos menores que zero de um vetor inteiro.
Acho que não é apenas feio, mas também fácil de usar incorretamente. É claro questd::remove_if
não pode alterar o tamanho do vetor (como o nome sugere), porque ele apenas passa os iteradores. Mas muitos desenvolvedores, inclusive eu, não entendem isso no começo.
Então, existe uma maneira mais segura e esperançosamente mais elegante de conseguir isso? Se não, por que?