STL Standard Template Library Introduction STL est une
STL Standard Template Library
Introduction • STL est une bibliothèque standard du C++ – fait partie du langage – tout le code est contenu dans les fichiers ‘header’, pas de librairies à linker – entièrement définie dans l’espace de nommage std – repose sur le concept de généricité (template) permettant de paramétrer le type d’élément utilisé – particulièrement efficace 2
Organisation • La librairie STL est organisée en plusieurs parties. Il existe principalement 3 types d’éléments : – les conteneurs permettent de contenir des données – les itérateurs permettent aux algorithmes de manipuler les conteneurs : récupérer une donnée et passer à la suivante – les algorithmes permettent de manipuler les données d’un conteneur en accédant aux données via les itérateurs • on rajoute – les ‘strings’ qui définissent les chaînes de caractères comme un type normal (copie, assignation, comparaison, …) 3
Conteneurs • Il s'agit de structures algorithmiques permettant : – d'organiser un ensemble de données de même type en séquence, – puis de parcourir ces données. • Exemples : – – les listes (list) les tableaux (vector) les listes triées (set) les listes d’associations (map) • La définition d’un conteneur est indépendante du type des objets contenus • On spécifie ce qu’il contient lors de la déclaration de la variable • Allocation dynamique et automatique de la mémoire 4
Conteneurs … Ordonnés (position indépendante de la valeur) – Vecteur : tableau à 1 dimension – List : liste doublement chaînée Triés (position dépendante de la valeur) – Set/Multiset : ensemble – Map/Multimap : tableau associatif 5
List Insère un élément dans la liste Comme pour tous les composants STL, il faut toujours se placer dans l’espace de nommage std: : #include <iostream>�� #include <list> int main () { std: : list<int> l; l. push_front(3); l. push_front(2); l. push_back(4); Retire un élément de la liste l. pop_front(); l. pop_back(); std: : cout << l. front() << std: : endl; std: : cout << l. back() << std: : endl; Accède à un élément de la liste } return 0; 6
Vector Insère un élément dans le vecteur Utilisation des vecteurs #include <iostream> #include <vector> int main () { std: : vector<int> v; v. push_back(3); v. push_back(4); Accède au 1 er élément std: : cout << v[0] << std: : endl; Modifie le 2è élément v. at(1�� ) = 5; std: : cout << v. back() Accède au dernier élément du vecteur << std: : endl; v. clear(); return 0; } Supprime tous les éléments 7
Quelques méthodes communes • Vider le conteneur : – void clear(); appelle le destructeur pour chaque objet dans le conteneur désalloue la mémoire utilisée • Retourner le nombre d’éléments : – int size(); • Tester si le conteneur est vide : – bool empty(); 8
Itérateurs • C’est une généralisation de la notion de pointeur. • Il permet de parcourir en séquence les éléments d’un conteneur sans avoir à se préoccuper du type du conteneur. #include <vector> { std: : vector<int> v; // std: : vector: : iterator it 1 = v. begin(); std: : vector: : iterator it 2 = v. end(); } it 1 v it 2 T T T T *it 1 9
Itérateurs #include <iostream> #include <list> int main() { std: : list<int> liste; Déclaration for (int i = 0; i < 10; i++) { liste. push_back (i); } 1 er élément std: : list<int>: : iterator it; for (it = liste. begin (); it != liste. end (); ++it) { int i = *it; std: : cout << "i = " << i << std: : endl; Pointe après le } dernier élément return (0); } 10
Choisir un conteneur • List – si on a besoin d’insérer ou de supprimer au milieu – insertion en temps constant – accès au n-ième élément en itérant depuis le 1 er • Vector – si on a besoin d’accéder au n-ième élément – insertion et suppression peuvent être coûteuses – Très efficace lorsqu’on a à parcourir le conteneur • Map – sont des listes maintenues triées lors de l’insertion de nouveaux éléments – listes associatives 11
- Slides: 11