HOWTO · C++
Conteneur vectoriel en C++ STL
Cet article explique comment utiliser un conteneur vectoriel en C++
Sur cette page
Cet article présentera plusieurs méthodes d’utilisation d’un conteneur vector en C++.
Utilisez std::vector pour construire un tableau dynamique en C++
std::vector fait partie de la bibliothèque de conteneurs et implémente un tableau redimensionnable dynamiquement qui stocke les éléments dans un stockage contigu. Les éléments vector sont généralement ajoutés à la fin avec les fonctions intégrées push_back ou emplace_back. Le conteneur vector peut être facilement construit avec la liste d’initialisation comme indiqué dans l’exemple de code suivant - objet arr. En outre, on peut stocker des valeurs de liste d’initialiseurs statiques dans l’expression de macro et exprimer de manière concise l’opération d’initialisation si nécessaire.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
#define INIT \
{ "Neque", "porro", "quisquam", "est", "qui", "dolorem", "ipsum", "quia" }
template <typename T>
void printVector(vector<T> &vec) {
for (const auto &item : vec) {
cout << item << ", ";
}
cout << endl;
}
int main() {
vector<string> arr = {"Neque", "porro", "quisquam", "est",
"qui", "dolorem", "ipsum", "quia"};
printVector(arr);
cout << endl;
vector<string> arr2 = INIT;
printVector(arr2);
cout << endl;
return EXIT_SUCCESS;
}
Utilisez std::vector pour stocker les objets struct en C++
std::vector peut être utilisé pour stocker des structures personnalisées et les initialiser avec la notation de liste accolée similaire à l’exemple précédent. Notez que, lors de l’ajout d’un nouvel élément struct à l’aide de la fonction push_back, la valeur doit être passée sous forme de liste entretoise, et s’il y a plusieurs structures imbriquées dans une struct, la notation correspondante doit être utilisée.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
struct cpu {
string wine;
string country;
int year;
} typedef cpu;
int main() {
vector<cpu> arr3 = {{"Chardonnay", "France", 2018}, {"Merlot", "USA", 2010}};
for (const auto &item : arr3) {
cout << item.wine << " - " << item.country << " - " << item.year << endl;
}
arr3.push_back({"Cabernet", "France", 2015});
for (const auto &item : arr3) {
cout << item.wine << " - " << item.country << " - " << item.year << endl;
}
return EXIT_SUCCESS;
}
Utilisez la fonction std::vector::swap pour permuter les éléments vectoriels en C++
std::vector fournit plusieurs fonctions intégrées pour opérer sur ses éléments, dont l’une est swap. Il peut être appelé à partir de l’objet vector et prendre un autre vector comme argument pour permuter leur contenu. Une autre fonction utile est size, qui récupère le nombre d’éléments courant dans l’objet vector donné. Notez cependant qu’il existe une fonction similaire appelée capacity qui renvoie le nombre d’éléments stockés dans la mémoire tampon actuellement allouée. Cette dernière est parfois allouée de plus grande taille pour éviter les appels inutiles aux services du système d’exploitation. L’exemple de code suivant illustre le scénario dans lequel les deux fonctions renvoient des valeurs différentes.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(vector<T> &vec) {
for (const auto &item : vec) {
cout << item << ", ";
}
cout << endl;
}
int main() {
vector<int> arr4 = {1, 12, 45, 134, 424};
vector<int> arr5 = {41, 32, 15, 14, 99};
printVector(arr4);
arr4.swap(arr5);
printVector(arr4);
cout << "arr4 capacity: " << arr4.capacity() << " size: " << arr4.size()
<< endl;
for (int i = 0; i < 10000; ++i) {
arr4.push_back(i * 5);
}
cout << "arr4 capacity: " << arr4.capacity() << " size: " << arr4.size()
<< endl;
arr4.shrink_to_fit();
cout << "arr4 capacity: " << arr4.capacity() << " size: " << arr4.size()
<< endl;
return EXIT_SUCCESS;
}
Production:
1, 12, 45, 134, 424,
41, 32, 15, 14, 99,
arr4 capacity: 5 size: 5
arr4 capacity: 10240 size: 10005
arr4 capacity: 10005 size: 10005