¿Hay una función de vector incorporada en C ++ para revertir un vector en su lugar?
¿O solo tienes que hacerlo manualmente?
Hay una función std::reverse
en el algorithm
encabezado para este propósito.
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a;
std::reverse(a.begin(), a.end());
return 0;
}
Todos los contenedores ofrecen una vista inversa de su contenido con
rbegin()
yrend()
. Estas dos funciones devuelven iteradores inversos , que se pueden usar como los normales, pero parecerá que el contenedor está realmente invertido.Ejemplo en vivo en Ideone . Salida:
fuente
std::sort
un vector de 1000 elementos, si solo necesita el top 10 en un orden no especificado, porque es más elegante questd::partition
? Esta es la escuela de pensamiento que paraliza mi experiencia de PC hoy como lo hizo hace 15 años, con la diferencia de que se desperdician aún más ciclos, miles de millones de ellos.print_range
no es correcto: no funcionará cuando se pase el rango vacío .std::reverse(a.rbegin(), a.rend())
? ; ^)Puedes usar
std::reverse
asífuente
También puedes usar en
std::list
lugar destd::vector
.list
tiene una lista de funciones incorporada :: reverse para revertir elementos.fuente
A menudo, la razón por la que desea invertir el vector es porque lo llena presionando todos los elementos al final, pero en realidad los estaba recibiendo en orden inverso. En ese caso, puede invertir el contenedor a medida que avanza utilizando un
deque
lugar y empujándolos directamente en el frente. (O bien, podría insertar los elementos en la parte delantera convector::insert()
, pero eso sería lento cuando hay muchos elementos porque tiene que mezclar todos los demás elementos para cada inserción). Así que en lugar de:En su lugar, puedes hacer:
fuente
fuente