Tableau inversé en C++

Jinku Hu 12 octobre 2023
  1. Utiliser le constructeur de plages vectorielles pour inverser un tableau en C++
  2. Utiliser la fonction std::reverse pour inverser le tableau en C++
  3. Utilisation des itérateurs rbegin/rend pour inverser le tableau en C++
Tableau inversé en C++

Cet article explique plusieurs méthodes pour inverser un tableau en C++.

Utiliser le constructeur de plages vectorielles pour inverser un tableau en C++

Le conteneur vector supporte le constructeur avec la plage spécifiée par les itérateurs. Ainsi, nous pouvons déclarer une nouvelle variable vector et l’initialiser avec les valeurs inversées du premier vecteur en utilisant les itérateurs rbegin/rend.

Notez que nous déclarons également une fonction PrintVector pour garder le clone propre et sortir le contenu du vector en un seul appel de fonction. Un inconvénient de cette méthode est qu’elle nécessite la construction d’une nouvelle variable de tableau, ce qui peut être une surcharge inutile dans certains scénarios.

#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;
}

Production :

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

Utiliser la fonction std::reverse pour inverser le tableau en C++

Alternativement, pour inverser les éléments de tableau en place sans déclarer d’autres variables, nous pouvons appeler la fonction std::reverse de la bibliothèque standard. La fonction std::reverse fait partie de l’en-tête <algorithm> et fait partie de la bibliothèque standard depuis le C++17. La fonction prend les itérateurs rbegin/rend de la plage comme arguments de la fonction et échange les éléments en place. Le vecteur sur lequel std::reverse a été appelé est modifié de façon permanente, et tout accès consécutif de ses éléments entraîne un nouvel ordonnancement.

#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;
}

Production :

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

Utilisation des itérateurs rbegin/rend pour inverser le tableau en C++

Contrairement au premier exemple de ce sujet, il existe des cas d’utilisation où le contenu réorganisé du vector n’a pas besoin d’être stocké dans le flux du programme, mais simplement sorti sur la console ou l’écran. L’exemple suivant montre comment imprimer les éléments du tableau vers la console dans l’ordre inverse et sans modifier le contenu des variables sous-jacentes.

#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;
}

Production :

10; 9; 8; 7; 6; 5; 4; 3; 2; 1;
Auteur: 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

Article connexe - C++ Array