| 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 |
| #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; | |
| } |
| Vector |
| #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; | |
| } |
| 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. |
| Itérateurs |
| 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 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 | ||