Array reversa em C++

  1. Utilizar vector Construtor com base na gama para inverter um array em C++
  2. Utilize a função std::reverse para inverter a matriz em C++
  3. Use os iteradores rbegin/rend para reverter array em C++

Este artigo irá explicar vários métodos de como inverter um array em C++.

Utilizar vector Construtor com base na gama para inverter um array em C++

O contentor vector apoia o construtor com a gama especificada pelos iteradores. Assim, podemos declarar uma nova variável vector e inicializá-la com valores invertidos do primeiro vector utilizando iteradores rbegin/rend.

Note-se que também declaramos uma função PrintVector para manter o clone arrumado e produzir conteúdo vector numa única chamada de função. Uma desvantagem deste método é que requer a construção de uma nova variável de matriz, que pode ser desnecessária em certos cenários.

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

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

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;

Utilize a função std::reverse para inverter a matriz em C++

Alternativamente, para inverter os elementos do array sem declarar outras variáveis, podemos chamar a função std::reverse a partir da biblioteca padrão. A função std::reverse faz parte do cabeçalho <algorithm> e faz parte da biblioteca padrão desde a C++17. A função toma o start/end iteradores da gama como argumentos da função e troca os elementos no lugar. O vector sobre o qual std::reverse foi chamado é modificado permanentemente, e qualquer acesso consequente aos seus elementos resulta numa nova ordenação.

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

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

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;

Use os iteradores rbegin/rend para reverter array em C++

Em contraste com o primeiro exemplo deste tópico, existem casos de utilização em que o conteúdo reordenado do vector não precisa de ser armazenado no fluxo do programa, mas apenas emitido para consola ou visualização. O exemplo seguinte demonstra como imprimir os elementos do array para consola em ordem inversa e sem modificar o conteúdo variável subjacente.

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

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

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;

Artigo relacionado - C++ Array

  • Atribuir dinamicamente um Array em C++
  • Obter Comprimento do Array em C++