(1) Escreva uma função template que receba um vetor e inverta a ordem dos seus elementos. A função deve funcionar para vetores de qualquer tipo. Na função main, aloque o vetor dinamicamente e preencha ele ordenado.

Exemplo de entrada:

Informe o tamanho do vetor: 5
Entre com os valores do vetor ordenado: 12345
Exemplo de saída:
Vetor reverso: 54321

Passo 1

O enunciado diz que a gente precisa criar uma função template em C++ que receba um vetor (dinamicamente alocado) de qualquer tipo e inverta a ordem dos seus elementos. Depois, na main, a gente pede ao usuário o tamanho do vetor, aloca dinamicamente, preenche com valores em ordem crescente e chama a função para inverter.
Conteúdo envolvido:
  • Templates em C++ (template<typename T>)
  • Alocação dinâmica (new[] e delete[])
  • Laços de repetição e índices para percorrer o vetor
  • Técnica de troca de variáveis (swap)

Passo 2

Vamos criar a função template que recebe um ponteiro para o primeiro elemento do vetor e o tamanho n.
Para inverter, a gente faz um laço de 0 até lfloor n/2rfloor-1 e, a cada iteração, troca o elemento i com o elemento n-1-i.
A troca pode ser feita com std::swap(arr[i], arr[n-1-i]).

Passo 3

Na função main:
  1. Perguntar ao usuário o tamanho n.
  2. Alocar um vetor de int (ou de outro tipo) com new int[n].
  3. Pedir ao usuário que entre com n valores ordenados e armazenar no vetor.
  4. Chamar a função de inversão.
  5. Imprimir o vetor invertido.
  6. Liberar a memória com delete[].

Resposta

#include <iostream>
#include <algorithm>  // para std::swap
using namespace std;

// Função template que inverte um vetor de tamanho n
template<typename T>
void inverterVetor(T* arr, int n) {
    // percorre só até a metade para não desfazer as trocas
    for (int i = 0; i < n/2; ++i) {
        // troca o elemento da frente com o de trás
        std::swap(arr[i], arr[n - 1 - i]);
    }
}

int main() {
    int n;
    cout << "Informe o tamanho do vetor: ";
    cin >> n;

    // aloca dinamicamente um vetor de ints
    int* vetor = new int[n];

    cout << "Entre com os valores do vetor ordenado:\n";
    for (int i = 0; i < n; ++i) {
        cin >> vetor[i]; 
    }

    // inverte o vetor usando nossa função template
    inverterVetor(vetor, n);

    // imprime o resultado
    cout << "Vetor reverso: ";
    for (int i = 0; i < n; ++i) {
        cout << vetor[i];
    }
    cout << endl;

    // libera a memória
    delete[] vetor;
    return 0;
}

Exercícios relacionados