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