Gibt es eine bessere Alternative zu std :: remove_if, um Elemente aus einem Vektor zu entfernen?

Die Aufgabe, Elemente mit einer bestimmten Eigenschaft aus einem @ zu entfernstd::vector oder ein anderer Container bietet sich für eine Implementierung im funktionalen Stil an: Warum sich mit Schleifen, Speicherfreigabe und korrektem Verschieben von Daten befassen?

Die Standardmethode hierfür in C ++ scheint jedoch die folgende zu sein:

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

Dieses Beispiel entfernt alle Elemente, die kleiner als Null sind, aus einem ganzzahligen Vektor.

Ich finde es nicht nur hässlich, sondern auch einfach falsch zu bedienen. Es ist klar, dassstd::remove_if kann die Größe des Vektors nicht ändern (wie der Name vermuten lässt), da nur Iteratoren übergeben werden. Aber viele Entwickler, auch ich, verstehen das am Anfang nicht.

So gibt es eine sicherere und hoffentlich elegantere Möglichkeit, dies zu erreichen? Wenn nicht, warum?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage