Czy istnieje wbudowana funkcja wektorowa w C ++ do odwracania wektora w miejscu?
A może po prostu musisz to zrobić ręcznie?
Służy do tego funkcja std::reverse
w algorithm
nagłówku.
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a;
std::reverse(a.begin(), a.end());
return 0;
}
Wszystkie kontenery oferują odwrócony widok zawartości za pomocą
rbegin()
irend()
. Te dwie funkcje zwracają tak zwane odwrotne iteratory , których można używać jak normalnych, ale będzie wyglądać tak, jakby kontener był faktycznie odwrócony.Przykład na żywo w Ideone . Wynik:
źródło
std::sort
mieć wektor 1000 elementów, jeśli potrzebujesz tylko pierwszej dziesiątki w nieokreślonej kolejności, ponieważ jest bardziej elegancki niżstd::partition
? To jest szkoła myślenia, która paraliżuje moje doświadczenie z komputerem, tak jak 15 lat temu, z tą różnicą, że jeszcze więcej cykli jest zmarnowanych, miliardy z nich.print_range
nie jest poprawne: nie zadziała, jeśli zostanie przekazany pusty zakres.std::reverse(a.rbegin(), a.rend())
zrobi? ; ^)Możesz używać w
std::reverse
ten sposóbźródło
Możesz także użyć
std::list
zamiaststd::vector
.list
posiada wbudowaną funkcję list :: reverse do odwracania elementów.źródło
Często powodem, dla którego chcesz odwrócić wektor, jest to, że wypełniasz go, wciskając wszystkie elementy na końcu, ale w rzeczywistości otrzymywałeś je w odwrotnej kolejności. W takim przypadku możesz odwrócić pojemnik w trakcie podróży, używając
deque
zamiast tego i popychając je bezpośrednio z przodu. (Lub możeszvector::insert()
zamiast tego wstawiać elementy z przodu za pomocą , ale byłoby to powolne, gdy jest dużo elementów, ponieważ musi tasować wszystkie inne elementy przy każdym wstawianiu). W przeciwieństwie do:Zamiast tego możesz:
źródło
źródło