Les conteneurs

Dans la librairie standard du C++, différents conteneurs sont proposés, vectormap ... , ainsi que les deque (double ended queue) qui sont des sortes de tableaux mais permettent l'insertion rapide en début et en fin de conteneur.

Nous étudierons surtout le type list.

Exemple:

#include <iostream>
#include <string>
#include <list>

using namespace std;

int main()
{
list<string> l;

l.push_back(string("Longtemps"));
l.push_back(string("je"));
l.push_back(string("me"));
l.push_back(string("suis"));
l.push_back(string("couché"));
l.push_back(string("de"));
l.push_back(string("bonne"));
l.push_back(string("heure"));

list<string>::iterator it;
for (it = l.begin(); it != l.end(); ++it)
cout << *it << " ";
cout << endl;

}
Evidemment, on utilise ici des templates, donc on pourrait aussi bien faire une liste d'entiers en mettant list<int> à la place de list<string> et en mettant des entiers dans la liste. On peut faire aussi des list<maclasseperso>, des list<maclasseperso*> ...


Exemple:

#include <iostream>
#include <string>
#include <list>

using namespace std;

int main()
{
list<double> l;
list<double>::iterator it;
l.push_back(2.1); // on ajoute un élément à la fin de la liste
l.push_front(5.6); // idem au début de la liste
l.push_back(3.2);
l.push_back(6.4);

for (it = l.begin(); it != l.end(); ++it)
cout << *it << " ";
cout << endl;

l.pop_back(); // nous avons aussi pop_front() pour enlever ce qui se trouve au début de la liste
// attention, contrairement à beaucoup d'implémentations de pop,
// l'élément enlevé n'est pas retourné par la fonction

cout << l.front() << " "<< l.back() << " " << l.size() <<endl; // on peut faire aussi l.front() = 12.2;

cout << l.empty() <<endl; // retourne 0 ce n'est pas vide

l.clear();

cout << l.empty() <<endl; // retourne 1 c'est vide

}
On peut aussi insérer au milieu d'une liste (c'est fait pour) et enlever des éléments au milieu de la liste.

Exemple:

#include <iostream>
#include <string>
#include <list>

using namespace std;

int main()
{
list<double> l;
list<double>::iterator it;
l.push_back(2.1); // on ajoute un élément à la fin de la liste
l.push_back(5.6);
l.push_back(3.2);
l.push_back(6.4);

it=l.begin(); it++; it++;

l.insert(it, 100.0);

for (it = l.begin(); it != l.end(); ++it)
cout << *it << " ";
cout << endl; // on obtient 2.1 5.6 100 3.2 6.4


l.remove(5.6); // on obtient 2.1 100 3.2 6.4

it=l.begin(); it++; it++;
l.erase( it, l.end()); // on obtient 2.1 100

for (it = l.begin(); it != l.end(); ++it)
cout << *it << " ";
cout << endl;
cout << l.size() << endl;

l.clear();

}

Quelques méthodes utiles de la classe liste : l.sort() pour trier , l.unique() utilisé après sort() pour éliminer les doublons (< et == sont supposés définis sur les éléments de la liste). l.merge(autreliste) pour fusionner ,  l.swap(autreliste)  pour échanger les deux listes, l.reverse() pour inverser la liste.
Drupal 7 Appliance - Powered by TurnKey Linux