¿Hay una función de vector incorporada en C++ para invertir un vector en su lugar?¿Cómo revertir un vector de C++?
¿O solo tiene que hacerlo manualmente?
¿Hay una función de vector incorporada en C++ para invertir un vector en su lugar?¿Cómo revertir un vector de C++?
¿O solo tiene que hacerlo manualmente?
Hay una función std::reverse
en el encabezado algorithm
para este propósito.
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a;
std::reverse(a.begin(), a.end());
return 0;
}
Puede utilizar std::reverse
como esto
std::reverse(str.begin(), str.end());
Todos los contenedores ofrecen una vista invertido de su contenido con rbegin()
y rend()
. Estas dos funciones devuelven so-calles iteradores inversos, que se pueden utilizar como los normales, pero parecerá que el contenedor está realmente invertido.
#include <vector>
#include <iostream>
template<class InIt>
void print_range(InIt first, InIt last, char const* delim = "\n"){
--last;
for(; first != last; ++first){
std::cout << *first << delim;
}
std::cout << *first;
}
int main(){
int a[] = { 1, 2, 3, 4, 5 };
std::vector<int> v(a, a+5);
print_range(v.begin(), v.end(), "->");
std::cout << "\n=============\n";
print_range(v.rbegin(), v.rend(), "<-");
}
Live example on Ideone. Salida:
1->2->3->4->5
=============
5<-4<-3<-2<-1
que, sin embargo, no invierte el vector en contexto. Puede crear un nuevo vector con std :: vector
@CashCow: Bueno, para empezar, no es necesario, es O (1). Revertir ... no tanto. La mayoría de las veces, realmente no necesita un contenedor invertido, solo necesita * ver * como revertido. De hecho, no puedo pensar en una situación en la que realmente necesite un contenedor invertido que no pueda ser resuelto con iteradores inversos. – Xeo
@CashCow: La elegancia no siempre es verdadera elegancia. En la mayoría de los casos en mi carrera profesional, solo necesitaba una vista invertida, pero no un vector invertido. Y en todos esos casos, el rendimiento sería totalmente innecesario si creara más copias o transformara el orden. ¿Sería usted también 'std :: sort' un vector de 1000 elementos, si solo necesita el top-10 en un orden no especificado, porque es más elegante que' std :: partition'? Esta es la escuela de pensamiento que paraliza la experiencia de mi PC hoy como lo hizo hace 15 años, con la diferencia de que aún se desperdician más ciclos, miles de millones de ellos. –
También se puede utilizar en lugar de std::list
std::vector
. list
tiene una función incorporada list::reverse para elementos de inversión.
Acabo de agregar el espacio de nombres 'std', espero que no te importe;) ... – MartinStettner
No, gracias. Acabo de notar sus ediciones y son absolutamente adecuadas y precisas. –
¿Podría explicar cómo invertir el vector de vectores? Quiero que v [0] se intercambie con v [v.size() - 1] y que el orden del elemento v [0] [i] permanezca como está. Esto es similar a cambiar el orden de las filas (si un vector se ve como una matriz). Si un vector se define como: vector> v; reverse (v.begin(), v.end()) no lo invierte. TIA! –