Revertir el array en C++

Jinku Hu 12 octubre 2023
  1. Usar el constructor basado en el rango vector para revertir un array en C++
  2. Usa la función std::reverse para revertir el array en C++
  3. Usar los iteradores rbegin/rend para revertir el array en C++
Revertir el array en C++

Este artículo explicará varios métodos de cómo revertir un array en C++.

Usar el constructor basado en el rango vector para revertir un array en C++

El contenedor vector apoya al constructor con el rango especificado por los iteradores. Por lo tanto, podemos declarar una nueva variable vector e inicializarla con valores invertidos del primer vector usando los iteradores de rbegin y rend.

Observa que también declaramos una función PrintVector para mantener el clon ordenado y el contenido de la salida vector en una sola llamada a la función. Una desventaja de este método es que requiere la construcción de una nueva variable de array, lo que puede ser una sobrecarga innecesaria en ciertos escenarios.

#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::vector;

void PrintVector(vector<int> &arr) {
  copy(arr.begin(), arr.end(), ostream_iterator<int>(cout, "; "));
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  vector<int> arr1_reversed(arr1.rbegin(), arr1.rend());
  PrintVector(arr1_reversed);

  return EXIT_SUCCESS;
}

Resultado:

10; 9; 8; 7; 6; 5; 4; 3; 2; 1;

Usa la función std::reverse para revertir el array en C++

Alternativamente, para invertir los elementos del array en su lugar sin declarar otras variables, podemos llamar a la función std::reverse de la biblioteca estándar. std::reverse es parte de la cabecera <algorithm> y ha sido parte de la biblioteca estándar desde el C++17. La función toma los iteradores start/end del rango como argumentos de la función e intercambia los elementos en su lugar. El vector sobre el que se ha llamado std::reverse se modifica permanentemente, y cualquier acceso consecuente de sus elementos resulta en un nuevo orden.

#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::reverse;
using std::vector;

void PrintVector(vector<int> &arr) {
  copy(arr.begin(), arr.end(), ostream_iterator<int>(cout, "; "));
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  reverse(arr1.begin(), arr1.end());
  PrintVector(arr1);

  return EXIT_SUCCESS;
}

Resultado:

10; 9; 8; 7; 6; 5; 4; 3; 2; 1;

Usar los iteradores rbegin/rend para revertir el array en C++

A diferencia del primer ejemplo de este tema, existen casos de uso en los que el contenido reordenado del vector no necesita ser almacenado en el flujo del programa, sino que sólo se envía a la consola o a la pantalla. El siguiente ejemplo demuestra cómo imprimir los elementos del array a la consola en orden inverso y sin modificar los contenidos variables subyacentes.

#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::vector;

void PrintVector(vector<int> &arr) {
  copy(arr.begin(), arr.end(), ostream_iterator<int>(cout, "; "));
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  copy(arr1.rbegin(), arr1.rend(), ostream_iterator<int>(cout, "; "));
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

10; 9; 8; 7; 6; 5; 4; 3; 2; 1;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Array