Page principale | Pages associées

Les Listes

La liste est une séquence qui permet de facilement insérer un élément à n'importe quelle position à moindre coût contrairement au vecteur mais ne possédant pas d'accès indexé par l'opaérateur[]. Comme le vecteur, la liste fournit les types standards pour ça manipulation size_type, iterateur, ...

#include <iostream> #include <list>
le fichier à inclure pour utiliser les lists

using namespace std;
Permet d'utiliser le namespace dans le source

int main() { // Une liste vide list< double > lDouble;
définit une liste vide sur des réels.

// Insertion de 5 éléments for ( int i = 1; i < 6; ++i ) { // Insertion de l'élément à la fin de la liste lDouble.push_back( i*0.5 ); } // Insertion de 5 éléments for ( int j = 6; j < 11; ++j ) { // Insertion de l'élément au début du vecteur lDouble.push_front( j*0.5 );
push_front() est disponible pour la liste car elle n'est pas coûteuse. La méthode insert( position, value ) est aussi disponible pour le même coût.
} // Normalement à ce stade notre vecteur doit contenir 10 éléments. cout << "Taille : " << lDouble.size() << endl;
size() permet de connaître le nombre d'éléments dans le vecteur.

// Afficher le premier élément cout << "premier : " << lDouble.front() << endl;
front() permet d'avoir accès au premier élément

// Afficher le dernier élément cout << "dernier : " << lDouble.back() << endl;
back() permet d'avoir accès au dernier élément

// Afficher le 3ième élément ( 4.0 ) cout << *(++(++lDouble.begin())) << endl;
La liste de fournit pas d'accès direct. Il faut donc partir du premier élément et se déplacer deux fois pour avoir le 3ième élément.

// Suppression du dernier élément lDouble.pop_back(); // Suppression du premier élément lDouble.pop_front();
cette méthode permet rapidement de supprimer le premier élément de la liste.

// Affichage du vecteur for ( list< double >::const_iterator k = lDouble.begin(); k != lDouble.end(); ++k ) { cout << "Element : " << *k << endl;
Affiche 4.5, 4, 3.5, 3, 05, 1, 1.5, 2 Cette boucle ressemble à celle utilisée par le vecteur et pour cause elles sont identiques (au type 'list' près évidement)
} // Suppression de tous les éléments
Ne sert à rien donc, je ne le fais pas.
}

Voilà, cette présentation rapide de la liste à montrer les quelques différences entre un vecteur et une liste (accès direct pour les vecteurs, facilité d'insertion pour les listes). Le deque que je ne présenterai pas dans ces tutoriaux combine les avantages d'une liste et d'un vecteur (accès direct et faciliter d'insertion en début et fin ). Une bonne doc vous en dira plus. On a vu aussi qu'on peut aussi facilement gérer un conteneur sur des entiers que sur des réels (cela aurait pu se faire aussi facilement avec des chaînes ou même des objets plus complexes comme un vecteur).

La suite...


Le source complet :
#include <iostream> #include <list> using namespace std; int main() { // Une liste vide list< double > lDouble; // Insertion de 5 éléments for ( int i = 1; i < 6; ++i ) { // Insertion de l'élément à la fin de la liste lDouble.push_back( i*0.5 ); } // Insertion de 5 éléments for ( int j = 6; j < 11; ++j ) { // Insertion de l'élément au début du vecteur lDouble.push_front( j*0.5 ); } // Normalement à ce stade notre vecteur doit contenir 10 éléments. cout << "Taille : " << lDouble.size() << endl; // Afficher le premier élément cout << "premier : " << lDouble.front() << endl; // Afficher le dernier élément cout << "dernier : " << lDouble.back() << endl; // Afficher le 3ième élément ( 4.0 ) cout << *(++(++lDouble.begin())) << endl; // Suppression du dernier élément lDouble.pop_back(); // Suppression du premier élément lDouble.pop_front(); // Affichage du vecteur for ( list< double >::const_iterator k = lDouble.begin(); k != lDouble.end(); ++k ) { cout << "Element : " << *k << endl; } // Suppression de tous les éléments }
00001 #include <iostream> 00002 #include <list> 00003 using namespace std; 00004 int main() 00005 { 00006 // Une liste vide 00007 list< double > lDouble; 00008 // Insertion de 5 éléments 00009 for ( int i = 1; i < 6; ++i ) 00010 { // Insertion de l'élément à la fin de la liste 00011 lDouble.push_back( i*0.5 ); 00012 } 00013 00014 // Insertion de 5 éléments 00015 for ( int j = 6; j < 11; ++j ) 00016 { // Insertion de l'élément au début du vecteur 00017 lDouble.push_front( j*0.5 ); 00018 } 00019 00020 // Normalement à ce stade notre vecteur doit contenir 10 éléments. 00021 cout << "Taille : " << lDouble.size() << endl; 00022 // Afficher le premier élément 00023 cout << "premier : " << lDouble.front() << endl; 00024 // Afficher le dernier élément 00025 cout << "dernier : " << lDouble.back() << endl; 00026 // Afficher le 3ième élément ( 4.0 ) 00027 cout << *(++(++lDouble.begin())) << endl; 00028 // Suppression du dernier élément 00029 lDouble.pop_back(); 00030 00031 // Suppression du premier élément 00032 lDouble.pop_front(); 00033 // Affichage du vecteur 00034 for ( list< double >::const_iterator k = lDouble.begin(); 00035 k != lDouble.end(); ++k ) 00036 { 00037 cout << "Element : " << *k << endl; 00038 } 00039 00040 // Suppression de tous les éléments 00041 }

Dernière modification : Sun Jul 4 20:19:13 2004