Gibt es in C ++ eine integrierte Vektorfunktion, um einen vorhandenen Vektor umzukehren?
Oder müssen Sie es nur manuell tun?
Zu diesem Zweck enthält std::reverse
der algorithm
Header eine Funktion .
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a;
std::reverse(a.begin(), a.end());
return 0;
}
Alle Container bieten eine umgekehrte Ansicht ihres Inhalts mit
rbegin()
undrend()
. Diese beiden Funktionen geben sogenannte Reverse-Iteratoren zurück , die wie normale verwendet werden können, aber es sieht so aus, als ob der Container tatsächlich umgekehrt ist.Live-Beispiel auf Ideone . Ausgabe:
quelle
std::sort
einen 1000-Elemente-Vektor verwenden, wenn Sie nur die Top-10 in nicht spezifizierter Reihenfolge benötigen, weil sie eleganter ist alsstd::partition
? Dies ist die Denkschule, die meine PC-Erfahrung heute wie vor 15 Jahren lähmt, mit dem Unterschied, dass noch mehr Zyklen verschwendet werden, Milliarden davon.print_range
ist nicht korrekt: Es funktioniert nicht, wenn der leere Bereich überschritten wird.std::reverse(a.rbegin(), a.rend())
tun? ; ^)Sie können verwendet werden,
std::reverse
wie diesquelle
Sie können auch
std::list
anstelle von verwendenstd::vector
.list
hat eine eingebaute Funktionsliste :: reverse zum Umkehren von Elementen.quelle
Oft möchten Sie den Vektor umkehren, weil Sie ihn füllen, indem Sie alle Elemente am Ende weiterschieben, sie aber tatsächlich in umgekehrter Reihenfolge erhalten haben. In diesem Fall können Sie den Container im Laufe der Zeit umkehren, indem Sie stattdessen a
deque
verwenden und ihn direkt auf die Vorderseite schieben. (Oder Sie könntenvector::insert()
stattdessen die Elemente an der Vorderseite mit einfügen , aber das wäre langsam, wenn es viele Elemente gibt, da alle anderen Elemente bei jeder Einfügung gemischt werden müssen.) Im Gegensatz zu:Sie können stattdessen Folgendes tun:
quelle
quelle