Structures de données IFT-2000 Abder Alikacem La STL du C++ Semaine 5 Édition Septembre 2009 Département d’informatique et de génie logiciel
STL : Standard Template Library La STL est une bibliothèque de C++ qui permet de mettre en œuvre d’autres structures de données plus complexes et de faciliter également l’écriture de programmes. En quelques sortes, cette bibliothèque propose des algorithmes clés en main pour beaucoup de problèmes de programmation. Il s’agit d’une bibliothèque générique qui fournit des solutions pour gérer un ensemble de données en utilisant des algorithmes efficaces. Tous les composants de STL sont des templates
STL : Standard Template Library Conteneurs: En C++, une classe contenant un ensemble d’éléments d'un certain type est appelée conteneur. Ce sont donc eux qui contiendront les informations que l’on veut stocker. Itérateurs: utilisés pour parcourir les items qui se retrouvent dans les conteneurs, ils jouent un peu le rôle de pointeurs sur des éléments d’un conteneur. Algorithmes: utilisés pour faire des traitements sur les éléments qui se retrouvent dans les conteneurs.
Les conteneurs Les conteneurs sont classés suivant trois types: Séquentiels Adapteurs Associatifs Les conteneurs vector Tableau list Liste doublement chaînée slist List simplement chaînée deque Tableau avec des opération efficaces d’insertion et de suppression aux extrémités queue File- FIFO (first-in, first-out) stack Pile - LIFO (last in, first out) set Ensemble avec des éléments distincts map Table de hachage multiset Comme l’ensemble mais autorise des valeurs répétées multimap Comme la table de hachage mais autorise des clefs multiples
Conteneurs - Requis L’élément qui sera inclus dans un conteneur doit posséder: constructeur de recopie opérateur = destructeur un constructeur par défaut un test d’égalité (opérateur ==) un critère d’ordre (operateur < et autres)
Les itérateurs Un itérateur peut être vu comme un pointeur sur un élément d’un conteneur. Chaque conteneur fourni un type d’itérateur. Exemple le type list<int> donne un itérateur de type : list<int> :: iterator. Tous les conteneurs définissent deux types d’itérateur container::iterator //permet un accès en mode lecture/écriture container::const_iterator //mode lecture seulement
Les itérateurs Tous les conteneurs offrent les mêmes fonctions de base permettant aux itérateurs d’accéder aux éléments begin() Retourne un itérateur pointant au premier élément du conteneur end() Retourne un itérateur pointant après le dernier élément du conteneur
Les itérateurs Les principaux opérateurs sont * donnant accès à la valeur, ++ et -- pour incrémenter et décrémenter une valeur. Opérateur * : Retourne l’élément de la position courante Opérateur ++ : Fait pointer l’itérateur à l’élément suivant Opérateur == : Indique si 2 itérateurs pointent sur le même élément Opérateur = : Assigne un itérateur #include <list> #include <iostream> using namespace std; int main( ) { list <int> list1; for (int i = 1; i<=40; i++) list1.push_back(i+i); list <int> :: iterator i; for (i = list1.begin( ); i!=list1.end( ); i++) cout <<*i << “ “ ; return 0 ; }
Les itérateurs Exemple #include <list> // création d’une liste de caractères list<char> coll; for (char c = ‘a’; c<=‘z’; c++) coll.push_back(c); // impression de la liste à l’aide d’un itérateur list<char>::const_iterator pos; for(pos = coll.begin(); pos != coll.end(); pos++) cout << *pos << ‘ ‘;
Les algorithmes http://www.sgi.com/tech/stl/ La STL fournit un nombre important d’algorithmes génériques les plus utilisés, tels que les algorithmes de parcours, de recherche et de tri. Ils s’appliquent sur les conteneurs. Les algorithmes ne sont pas des fonctions membres des classes des conteneurs. Ce sont plutôt des fonctions globales qui opèrent avec des intérateurs. Pour manipuler cette bibliothèque, il suffit d‘incorporer dans l’entête #include <algorithtm> Description de la Standard Template Library du C++ http://www.sgi.com/tech/stl/