Conteneur vectoriel en C++ STL
-
Utilisez
std::vector
pour construire un tableau dynamique en C++ -
Utilisez
std::vector
pour stocker les objetsstruct
en C++ -
Utilisez la fonction
std::vector::swap
pour permuter les éléments vectoriels en C++
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
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