std :: liste dans C++ avec exemple
Qu'est-ce qu'une liste std :: ?
In C++, le std::list fait rรฉfรฉrence ร un conteneur de stockage. Le std:list vous permet d'insรฉrer et de supprimer des รฉlรฉments de n'importe oรน. Le std::list est implรฉmentรฉ comme une liste doublement liรฉe. Cela signifie que les donnรฉes de la liste sont accessibles de maniรจre bidirectionnelle et sรฉquentielle.
La liste Standard Template Library ne prend pas en charge lโaccรจs alรฉatoire rapide, mais elle prend en charge lโaccรจs sรฉquentiel depuis toutes les directions.
Vous pouvez disperser les รฉlรฉments de la liste dans diffรฉrents blocs de mรฉmoire. Les informations nรฉcessaires ร l'accรจs sรฉquentiel aux donnรฉes sont stockรฉes dans un conteneur. La std::list peut s'รฉtendre et se rรฉduire des deux cรดtรฉs selon les besoins pendant l'exรฉcution. Un allocateur interne rรฉpond automatiquement aux exigences de stockage.
Pourquoi utiliser std :: list ?
Voici les raisons d'utiliser std::List :
- Le std::list se compare mieux aux autres conteneurs de sรฉquence comme le tableau et le vecteur.
- Ils ont de meilleures performances pour insรฉrer, dรฉplacer et extraire des รฉlรฉments depuis nโimporte quelle position.
- Le std::list fait รฉgalement mieux avec les algorithmes qui effectuent de telles opรฉrations de maniรจre intensive.
Syntaxe de liste
Pour dรฉfinir la std::list, nous devons importer le En tรชte de fichier. Voici la syntaxe de dรฉfinition std::list :
template < class Type, class Alloc =allocator<T> > class list;
Voici une description des paramรจtres ci-dessus :
- T โ Dรฉfinit le type d'รฉlรฉment contenu. Vous pouvez remplacer T par n'importe quel type de donnรฉes, mรชme les types dรฉfinis par l'utilisateur.
- Alloc โ Dรฉfinit le type de l'objet allocateur. Celui-ci utilise le modรจle de classe allocateur par dรฉfaut. Il dรฉpend de la valeur et utilise un modรจle simple d'allocation de mรฉmoire.
Exemples 1
#include <algorithm>
#include <iostream>
#include <list>
int main() {
std::list<int> my_list = { 12, 5, 10, 9 };
for (int x : my_list) {
std::cout << x << '\n';
}
}
Sortie :
Voici une capture d'รฉcran du code :
Explication du code :
- Incluez le fichier d'en-tรชte de l'algorithme pour utiliser ses fonctions.
- Incluez le fichier d'en-tรชte iostream pour utiliser ses fonctions.
- Incluez le fichier d'en-tรชte de liste pour utiliser ses fonctions.
- Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans le corps de cette fonction.
- Crรฉez une liste nommรฉe my_list avec un ensemble de 4 entiers.
- Utilisez une boucle for pour crรฉer une variable de boucle x. Cette variable sera utilisรฉe pour parcourir les รฉlรฉments de la liste.
- Imprimez les valeurs de la liste sur la console.
- Fin du corps du pour la boucle.
- Fin du corps de la fonction main().
C++ Fonctions de liste
Voici les fonctions std::list courantes :
| Fonction | Description |
|---|---|
| insรฉrer() | Cette fonction insรจre un nouvel รฉlรฉment avant la position vers laquelle pointe l'itรฉrateur. |
| repousser() | Cette fonction ajoute un nouvel รฉlรฉment ร la fin de la liste. |
| push_front() | Il ajoute un nouvel รฉlรฉment au dรฉbut de la liste. |
| pop_front() | Il supprime le premier รฉlรฉment de la liste. |
| Taille() | Cette fonction dรฉtermine le nombre d'รฉlรฉments de la liste. |
| de face() | To dรฉtermine les premiers รฉlรฉments de la liste. |
| dos() | To dรฉtermine le dernier รฉlรฉment de la liste. |
| inverser () | Il inverse les รฉlรฉments de la liste. |
| fusionner() | Il fusionne deux listes triรฉes. |
Constructeurs
Voici la liste des fonctions fournis par le En tรชte de fichier:
- Constructeur par dรฉfaut std::list::list() - Il crรฉe une liste vide, avec zรฉro รฉlรฉment.
- Constructeur de remplissage std::list::list()- Il crรฉe une liste avec n รฉlรฉments et attribue une valeur de zรฉro (0) ร chaque รฉlรฉment.
- Constructeur de plage std::list::list()- crรฉe une liste avec de nombreux รฉlรฉments compris entre le premier et le dernier.
- Constructeur de copie std::list::list()- Il crรฉe une liste avec une copie de chaque รฉlรฉment contenu dans la liste existante.
- Constructeur de dรฉplacement std::list::list()- crรฉe une liste avec les รฉlรฉments d'une autre liste en utilisant la sรฉmantique de dรฉplacement.
- Constructeur de liste d'initialisation std::list::list() - Il crรฉe une liste avec les รฉlรฉments d'une autre liste en utilisant la sรฉmantique de dรฉplacement.
Exemple 2
#include <iostream>
#include <list>
using namespace std;
int main(void) {
list<int> l;
list<int> l1 = { 10, 20, 30 };
list<int> l2(l1.begin(), l1.end());
list<int> l3(move(l1));
cout << "Size of list l: " << l.size() << endl;
cout << "List l2 contents: " << endl;
for (auto it = l2.begin(); it != l2.end(); ++it)
cout << *it << endl;
cout << "List l3 contents: " << endl;
for (auto it = l3.begin(); it != l3.end(); ++it)
cout << *it << endl;
return 0;
}
Sortie :
Voici une capture d'รฉcran du code :
Explication du code :
- Incluez le fichier d'en-tรชte iostream pour utiliser ses fonctions.
- Incluez le fichier d'en-tรชte de liste pour utiliser ses fonctions.
- Incluez l'espace de noms std dans le code pour utiliser ses classes sans l'appeler.
- Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans le corps de cette fonction.
- Crรฉez une liste vide nommรฉe l.
- Crรฉez une liste nommรฉe l1 avec un ensemble de 3 entiers.
- Crรฉez une liste nommรฉe l2 avec tous les รฉlรฉments de la liste nommรฉe l1, du dรฉbut ร la fin.
- Crรฉez une liste nommรฉe l3 en utilisant la sรฉmantique de dรฉplacement. La liste l3 aura le mรชme contenu que la liste l2.
- Imprimez la taille de la liste nommรฉe l sur la console ร cรดtรฉ d'un autre texte.
- Imprimez du texte sur la console.
- Crรฉez un itรฉrateur nommรฉ et utilisez-le pour parcourir les รฉlรฉments de la liste nommรฉe l2.
- Imprime les รฉlรฉments de la liste nommรฉe l2 sur la console.
- Imprimez du texte sur la console.
- Crรฉez un itรฉrateur nommรฉ et utilisez-le pour parcourir les รฉlรฉments de la liste nommรฉe l3.
- Imprime les รฉlรฉments de la liste nommรฉe l3 sur la console.
- Le programme doit renvoyer de la valeur une fois terminรฉ.
- Fin du corps de la fonction main().
Propriรฉtรฉs du conteneur
Voici la liste des propriรฉtรฉs du conteneur :
| Propriรฉtรฉs | Description |
|---|---|
| Sรฉquence | Les conteneurs de sรฉquence ordonnent leurs รฉlรฉments dans une sรฉquence linรฉaire stricte. Les รฉlรฉments sont accessibles par leur position dans la sรฉquence. |
| Liste ร double chaรฎnage | Chaque รฉlรฉment contient des informations sur la faรงon de localiser les รฉlรฉments prรฉcรฉdents et suivants. Cela permet un temps constant pour les opรฉrations dโinsertion et de suppression. |
| Conscient de l'allocateur | Un objet allocateur est utilisรฉ pour modifier dynamiquement la taille du stockage. |
Insรฉrer dans une liste
Il existe diffรฉrentes fonctions que nous pouvons utiliser pour insรฉrer des valeurs dans une liste. Dรฉmontrons ceci :
Exemple 3
#include <algorithm>
#include <iostream>
#include <list>
int main() {
std::list<int> my_list = { 12, 5, 10, 9 };
my_list.push_front(11);
my_list.push_back(18);
auto it = std::find(my_list.begin(), my_list.end(), 10);
if (it != my_list.end()) {
my_list.insert(it, 21);
}
for (int x : my_list) {
std::cout << x << '\n';
}
}
Sortie :
Voici une capture d'รฉcran du code :
Explication du code :
- Incluez le fichier d'en-tรชte de l'algorithme pour utiliser ses fonctions.
- Incluez le fichier d'en-tรชte iostream pour utiliser ses fonctions.
- Incluez le fichier d'en-tรชte de liste pour utiliser ses fonctions.
- Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans le corps de cette fonction.
- Crรฉez une liste nommรฉe my_list avec un ensemble de 4 entiers.
- Insรฉrez l'รฉlรฉment 11 au dรฉbut de la liste nommรฉe my_list.
- Insรฉrez l'รฉlรฉment 18 ร la fin de la liste nommรฉe my_list.
- Crรฉez un itรฉrateur et utilisez-le pour trouver l'รฉlรฉment 10 de la liste my_list.
- Utilisez une instruction if pour dรฉterminer si l'รฉlรฉment ci-dessus a รฉtรฉ trouvรฉ ou non.
- Insรฉrez l'รฉlรฉment 21 avant l'รฉlรฉment ci-dessus s'il a รฉtรฉ trouvรฉ.
- Fin du corps de l'instruction if.
- Utilisez une boucle for pour crรฉer une variable de boucle x. Cette variable sera utilisรฉe pour parcourir les รฉlรฉments de la liste.
- Imprimez les valeurs de la liste sur la console.
- Fin du corps de la boucle.
- Fin du corps de la fonction main().
Suppression d'une liste
Il est possible de supprimer des รฉlรฉments d'une liste. La fonction effacer() vous permet de supprimer un รฉlรฉment ou une plage dโรฉlรฉments dโune liste.
- Pour supprimer un seul รฉlรฉment, il vous suffit de passer une position entiรจre. L'รฉlรฉment sera supprimรฉ.
- Pour supprimer une plage, vous transmettez les itรฉrateurs de dรฉbut et de fin. Montrons-le.
Exemple 4
#include <algorithm>
#include <iostream>
#include <list>
using namespace std;
int main() {
std::list<int> my_list = { 12, 5, 10, 9 };
cout << "List elements before deletion: ";
for (int x : my_list) {
std::cout << x << '\n';
}
list<int>::iterator i = my_list.begin();
my_list.erase(i);
cout << "\nList elements after deletion: ";
for (int x : my_list) {
std::cout << x << '\n';
}
return 0;
}
Sortie :
Voici une capture d'รฉcran du code :
Explication du code :
- Incluez le fichier d'en-tรชte de l'algorithme pour utiliser ses fonctions.
- Incluez le fichier d'en-tรชte iostream pour utiliser ses fonctions.
- Incluez le fichier d'en-tรชte de liste pour utiliser ses fonctions.
- Incluez l'espace de noms std dans notre programme pour utiliser ses classes sans l'appeler.
- Appelez la fonction main(). La logique du programme doit รชtre ajoutรฉe dans le corps de cette fonction.
- Crรฉez une liste nommรฉe my_list avec un ensemble de 4 entiers.
- Imprimez du texte sur la console.
- Utilisez une boucle for pour crรฉer une variable de boucle x. Cette variable sera utilisรฉe pour parcourir les รฉlรฉments de la liste.
- Imprimez les valeurs de la liste sur la console.
- Fin du corps de la boucle for.
- Crรฉez un itรฉrateur i qui pointe vers le premier รฉlรฉment de la liste.
- Utilisez la fonction effacer() pointรฉe par l'itรฉrateur i.
- Imprimez du texte sur la console.
- Utilisez une boucle for pour crรฉer une variable de boucle x. Cette variable sera utilisรฉe pour parcourir les รฉlรฉments de la liste.
- Imprimez les valeurs de la liste sur la console. Cela vient aprรจs la suppression.
- Fin du corps de la boucle for.
- Le programme doit renvoyer une valeur une fois terminรฉ.
- Fin du corps de la fonction main().
Rรฉsumรฉ
- Le std::list est un conteneur de stockage.
- Il permet l'insertion et la suppression d'รฉlรฉments de n'importe oรน et ร temps constant.
- Il est implรฉmentรฉ sous forme de double lien
- Les donnรฉes std::list sont accessibles de maniรจre bidirectionnelle et sรฉquentielle.
- std::list ne prend pas en charge l'accรจs alรฉatoire rapide. Cependant, il prend en charge lโaccรจs sรฉquentiel depuis toutes les directions.
- Vous pouvez disperser les รฉlรฉments de liste de std::list dans diffรฉrents morceaux de mรฉmoire.
- Vous pouvez rรฉduire ou รฉtendre std::list des deux cรดtรฉs selon vos besoins pendant l'exรฉcution.
- Pour insรฉrer des รฉlรฉments dans std::list, nous utilisons la fonction insert().
- Pour supprimer des รฉlรฉments de la std::list, nous utilisons la fonction Eraser().






