Utiliser le conteneur de liste STL dans C++ STL
-
Utilisez
std::list<T>
pour déclarer l’objet conteneur de liste en C++ -
Utilisez la fonction
insert()
pour insérer des éléments à un emplacement spécifié dans la liste en C++ -
Utilisez la fonction
swap()
pour échanger des éléments de deux listes en C++ -
Utilisez la fonction
merge()
pour joindre deux listes triées en une seule
Cet article présentera plusieurs méthodes sur l’utilisation du conteneur liste
STL en C++.
Utilisez std::list<T>
pour déclarer l’objet conteneur de liste en C++
Le conteneur std::list
fait partie de la bibliothèque de modèles standard et implémente une structure de données de liste qui fournit une insertion/suppression constante d’éléments à partir de n’importe quelle position. Il est généralement implémenté sous forme de liste à double liaison et prend en charge l’itération bidirectionnelle par opposition à std::forward_list
. Par contre, std::list
n’est pas équipé pour avoir un accès aléatoire rapide à des éléments comme std::vector
ou std::deque
. Il ne fournit que deux fonctions à temps constant, front
et back
pour accéder au premier et au dernier élément. std::list
peut être initialisé avec le type de données donné et la notation de liste d’initialisation commune, comme illustré dans l’exemple de code suivant. Les méthodes push_back
et push_front
peuvent être utilisées pour ajouter des éléments de chaque côté de la liste.
#include <algorithm>
#include <iostream>
#include <list>
using std::cout;
using std::endl;
using std::list;
template <typename T>
void printList(list<T> l) {
for (const auto &item : l) {
cout << item << "; ";
}
cout << endl;
}
int main() {
std::list<int> l1 = {11, 12, 13, 14};
l1.push_front(15);
printList(l1);
l1.push_back(16);
printList(l1);
return EXIT_SUCCESS;
}
Production:
15; 11; 12; 13; 14;
15; 11; 12; 13; 14; 16;
Utilisez la fonction insert()
pour insérer des éléments à un emplacement spécifié dans la liste en C++
La fonction membre insert()
peut être utilisée pour ajouter des éléments à une position donnée. La fonction a plusieurs surcharges, dont la première ne prend que deux arguments : l’itérateur et la référence à l’objet. L’élément donné est inséré avant l’élément sur lequel pointe l’itérateur. L’extrait de code suivant montre comment trouver la valeur spécifique dans la liste, puis insérer l’élément souhaité avant celle-ci.
#include <algorithm>
#include <iostream>
#include <list>
using std::cout;
using std::endl;
using std::list;
template <typename T>
void printList(list<T> l) {
for (const auto &item : l) {
cout << item << "; ";
}
cout << endl;
}
int main() {
std::list<int> l1 = {11, 12, 13, 14};
printList(l1);
auto iter = std::find(l1.begin(), l1.end(), 13);
if (iter != l1.end()) {
l1.insert(iter, 55);
}
printList(l1);
return EXIT_SUCCESS;
}
Production:
11; 12; 13; 14;
11; 12; 55; 13; 14;
Utilisez la fonction swap()
pour échanger des éléments de deux listes en C++
Une autre fonction membre utile du conteneur std::list
est swap()
qui échange les éléments de l’objet liste avec une autre liste qui est passée comme seul argument. Notez que cette opération ne déplace ni ne copie les éléments individuels et que tous les itérateurs/références restent valides après l’appel de fonction.
#include <algorithm>
#include <iostream>
#include <list>
using std::cout;
using std::endl;
using std::list;
template <typename T>
void printList(list<T> l) {
for (const auto &item : l) {
cout << item << "; ";
}
cout << endl;
}
int main() {
std::list<int> l1 = {11, 12, 13, 14};
std::list<int> l2 = {1, 2, 3, 4, 11};
cout << "l2: ";
printList(l2);
l2.swap(l1);
cout << "l2: ";
printList(l2);
return EXIT_SUCCESS;
}
Production:
l2: 1; 2; 3; 4; 11;
l2: 11; 12; 13; 14;
Utilisez la fonction merge()
pour joindre deux listes triées en une seule
Alternativement, on peut joindre des éléments de deux listes triées en une seule en utilisant la fonction membre merge
. Notez que les deux listes doivent être triées par ordre croissant. merge
prend une référence à l’objet liste, dont les éléments sont fusionnés avec l’objet appelant. Après l’opération, l’objet liste passé comme argument devient vide. La fonction classe les éléments de l’objet de liste résultant dans l’ordre croissant, comme illustré dans l’exemple de code suivant.
#include <algorithm>
#include <iostream>
#include <list>
using std::cout;
using std::endl;
using std::list;
template <typename T>
void printList(list<T> l) {
for (const auto &item : l) {
cout << item << "; ";
}
cout << endl;
}
int main() {
std::list<int> l1 = {8, 10, 2, 4};
std::list<int> l2 = {7, 3, 9, 5, 1};
l2.sort();
l1.sort();
cout << "l2: ";
printList(l2);
l2.merge(l1);
cout << "l2: ";
printList(l2);
return EXIT_SUCCESS;
}
Production:
l2: 1; 3; 5; 7; 9;
l2: 1; 2; 3; 4; 5; 7; 8; 9; 10;
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