QVector der Schnittstelle erlaubt es mit den std Algorithmen verwendet werden, so können Sie nur verwenden, um die erase-remove idiom
QVector<int> vec;
...
vec.erase(std::remove_if(vec.begin(), vec.end(), [](int i) { return i < 0; }),
vec.end());
Als Erklärung:
remove_if
nimmt eine Reihe von Iteratoren (vec.begin(), vec.end()
) , und verschiebt alle Elemente, für die das bereitgestellte Lambda bis zum Ende wahr ist. Es gibt dann einen Iterator an den Anfang dieses Bereichs zurück.
erase
nimmt eine Reihe von Iteratoren (der zurückgegebene Wert von remove_if
und vec.end()
) und löscht sie aus dem Vektor.
Arbeitsbeispiel:
#include <QVector>
#include <iostream>
int main()
{
QVector<int> vec { 1, 2, 3, -1, -2, -3, 4, 5, 6, -7, -8, -1, 1, 2, 3 };
// erase all elements less than 0
vec.erase(std::remove_if(vec.begin(), vec.end(), [](int i) { return i < 0; }),
vec.end());
// print results
for (int i : vec)
std::cout << i << ' ';
std::cout << '\n';
return 0;
}
Ausgang:
./a.out
1 2 3 4 5 6 1 2 3
versuchen Sie es mit [diese Methode] (http://en.cppreference.com/w/cpp/algorithm/remove) – JLev