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++ -
Utilisez l’algorithme
std::shuffle
pour réorganiser les éléments vectoriels de manière aléatoire en C++ -
Utilisez l’algorithme
std::rotate
pour faire pivoter les éléments vectoriels 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;
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