Standard Template Library 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 sur le concept de généricité (template) permettant de paramétrer le type d’élément utilisé particulièrement efficace
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, …)
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
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
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); l.pop_front(); l.pop_back(); std::cout << l.front() << std::endl; std::cout << l.back() << std::endl; return 0; } Retire un élément de la liste Accède à un élément de la liste
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); std::cout << v[0] << std::endl; v.at(1) = 5; std::cout << v.back() << std::endl; v.clear(); return 0; } Utilisation des vecteurs Accède au 1er élément Modifie le 2è élément Accède au dernier élément du vecteur Supprime tous les éléments
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();
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 it1 = v.begin(); std::vector::iterator it2 = v.end(); } it1 it2 T v *it1
Pointe après le dernier élément Itérateurs #include <iostream> #include <list> int main() { std::list<int> liste; for (int i = 0; i < 10; i++) { liste.push_back (i); } std::list<int>::iterator it; for (it = liste.begin (); it != liste.end (); ++it) { int i = *it; std::cout << "i = " << i << std::endl; return (0); Déclaration 1er élément Pointe après le dernier élément
Choisir un conteneur List Vector Map 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 1er 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