(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
Entre com os valores do vetor ordenado: 12345
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
Conteúdo envolvido:
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[]
edelete[]
) - 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
Para inverter, a gente faz um laço de 0 até e, a cada iteração, troca o elemento
A troca pode ser feita com
n
.Para inverter, a gente faz um laço de 0 até
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
:- Perguntar ao usuário o tamanho
n
. - Alocar um vetor de
int
(ou de outro tipo) comnew int[n]
. - Pedir ao usuário que entre com
n
valores ordenados e armazenar no vetor. - Chamar a função de inversão.
- Imprimir o vetor invertido.
- 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;
}