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?

questionAnswers(2)

yourAnswerToTheQuestion