Inverser les éléments vectoriels à l'aide des utilitaires STL en C++

Jinku Hu 12 octobre 2023
  1. Utilisez l’algorithme std::reverse pour inverser les éléments vectoriels en C++
  2. Utilisez l’algorithme std::shuffle pour réorganiser les éléments vectoriels de manière aléatoire en C++
  3. Utilisez l’algorithme std::rotate pour faire pivoter les éléments vectoriels en C++
Inverser les éléments vectoriels à l'aide des utilitaires STL en C++

Cet article présentera comment inverser les éléments vectoriels à l’aide des utilitaires STL en C++.

Utilisez l’algorithme std::reverse pour inverser les éléments vectoriels en C++

std::reverse fait partie des algorithmes STL et peut être utilisé pour inverser l’ordre des éléments dans une plage donnée. L’algorithme std::reverse échange en interne deux éléments à partir de la première et de la dernière paire. std::reverse prend deux arguments qui représentent les itérateurs de la plage donnée. Nous générons des entiers aléatoires en tant qu’objet vector dans l’exemple suivant, qui est inversé à l’aide de l’algorithme std::reverse et affiche les résultats dans le flux cout.

#include <iomanip>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>

using std::cout;
using std::endl;
using std::left;
using std::setw;

void generateNumbers(std::vector<int> &arr, size_t &width) {
  std::srand(std::time(nullptr));
  for (size_t i = 0; i < width; i++) {
    arr.push_back(std::rand() % 100);
  }
}

int main() {
  size_t width = 10;
  std::vector<int> arr;
  arr.reserve(width);

  generateNumbers(arr, width);

  cout << left << setw(10) << "arr: ";
  copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  std::reverse(arr.begin(), arr.end());

  cout << left << setw(10) << "arr: ";
  copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  return EXIT_SUCCESS;
}

Production:

arr:      78; 56; 63; 59; 16; 7; 54; 98; 87; 92;
arr:      92; 87; 98; 54; 7; 16; 59; 63; 56; 78;

Utilisez l’algorithme std::shuffle pour réorganiser les éléments vectoriels de manière aléatoire en C++

std::shuffle peut être utilisé pour réorganiser aléatoirement des éléments dans la plage de telle sorte que chaque permutation d’éléments ait une probabilité égale. La fonction prend au moins deux arguments qui indiquent les itérateurs de début et de fin de la plage. Facultativement, std::shuffle peut prendre le troisième argument représentant la fonction de générateur de nombres aléatoires. Dans ce cas, nous avons utilisé mersenne_twister_engine, qui est fourni sous l’en-tête <random>.

#include <iomanip>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>

using std::cout;
using std::endl;
using std::left;
using std::setw;

void generateNumbers(std::vector<int> &arr, size_t &width) {
  std::srand(std::time(nullptr));
  for (size_t i = 0; i < width; i++) {
    arr.push_back(std::rand() % 100);
  }
}

int main() {
  size_t width = 10;
  std::vector<int> arr;
  arr.reserve(width);

  generateNumbers(arr, width);

  cout << left << setw(10) << "arr: ";
  copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  std::shuffle(arr.begin(), arr.end(), std::mt19937(std::random_device()()));

  cout << left << setw(10) << "arr: ";
  copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  return EXIT_SUCCESS;
}

Production:

arr:      40; 77; 74; 41; 79; 21; 81; 98; 13; 90;
arr:      79; 41; 90; 77; 21; 81; 98; 74; 13; 40;

Utilisez l’algorithme std::rotate pour faire pivoter les éléments vectoriels en C++

Une autre fonction utile incluse dans les algorithmes STL est - std::rotate. La fonction décale les éléments vers la gauche et enveloppe les éléments qui sont déplacés en dehors de la limite du vecteur. std::rotate prend trois arguments d’itérateurs de type ForwardIt et effectue la rotation de sorte que l’élément pointé par le deuxième argument soit déplacé à la première position de la liste nouvellement générée.

#include <iomanip>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>

using std::cout;
using std::endl;
using std::left;
using std::setw;

void generateNumbers(std::vector<int> &arr, size_t &width) {
  std::srand(std::time(nullptr));
  for (size_t i = 0; i < width; i++) {
    arr.push_back(std::rand() % 100);
  }
}

int main() {
  size_t width = 10;
  std::vector<int> arr;
  arr.reserve(width);

  generateNumbers(arr, width);

  cout << left << setw(10) << "arr: ";
  copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  std::rotate(arr.begin(), arr.begin() + (width / 2), arr.begin() + width);

  cout << left << setw(10) << "arr: ";
  copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  return EXIT_SUCCESS;
}

Production:

arr:      75; 16; 79; 62; 53; 5; 77; 50; 31; 54;
arr:      5; 77; 50; 31; 54; 75; 16; 79; 62; 53;
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++ Vector