La notion de conteneur

Un conteneur est une structure qui permet d'organiser un ensemble d'objets du même type en séquence. Voici par exemple différents types de conteneurs:

La notion de conteneur est importante. Il s'agit de structures algorithmiques permettant d'organiser un ensemble de données en séquence, puis de parcourir ces données.

Cette notion permet d'abstraire le caractère séquentiel d'un ensemble de données de son implémentation en mémoire. En d'autres termes, il permet de travailler sur un ensemble de données en décrivant "mathématiquement" les opérations à effectuer. On choisit ensuite le type d'implémentation pour garantir l'efficacité "algorithmique" des opérations.

On peut ainsi écrire des algorithmes manipulant un "modèle" de conteneur. Ils seront alors utilisables avec n'importe quelle implémentation de conteneur qui satisfait ce modèle, et notamment les implémentations standards fournies par la STL (vector,list,set,map). On choisira alors l'implémentation adéquate en fonction de l'efficacité que l'on veut obtenir pour les différents algorithmes qui lui seront appliqués.

Pour bien utiliser la STL, il faut donc comprendre et connaitre:

Le premier point vous permettra d'écrire des algorithmes qui pourront marcher avec tous les conteneurs de la STL, ou d'écrire des classes conteneurs auxquelles on pourra appliquer tous les algorithmes existants (voir rubrique "Un peu plus loin"). Le deuxième point vous permettra de choisir le type de conteneur le plus adapté à votre problème, sachant que la force de la STL est justement de pouvoir essayer tous les types de conteneurs en ne modifiant que très peu (vraiment très peu!) votre programme. Vous éviterez ainsi les emplois inadaptés de la STL, comme par exemple l'utilisation d'un conteneur "tableau" pour représenter le triplet de coordonnées d'une classe Point3D!

idée Un peu plus loin...
La notion de conteneur ne se limite pas aux classes fournies par la STL. Il s'agit plus globalement d'un design pattern que vous pouvez adopter lorsque vous concevez des classes ou fonctions. Nous verrons plus tard comment, grâce au mécanisme des templates ,à la spécialisation et à l'usage de traits , écrire des algorithmes très génériques et pourtant très efficaces en suivant la philosophie des conteneurs (et de leur pendant, les itérateurs).

Plan de la présentation des conteneurs

Pour ce tutoriel, nous éviterons cependant de présenter les points communs puis les particularités de manière académique et exhaustive. Le lecteur se familiarisera d'abord avec la STL, en étudiant indépendamment les classe list et vector. Nous introduirons ensuite la notion d'itérateur, qui permettra d'aborder la présentation des conteneurs plus sophistiqués que sont les set (listes triées) et les map (listes d'associations). Nous verrons alors comment choisir un conteneur en fonction du type d'accès qu'on y fait. Ce qui permettra d'introduire le dernier des conteneurs, le deque (prononcer "deck"), à mi-chemin entre list et vector.

La dernière partie sera consacrée à des exemples de mise en oeuvre des conteneurs de la STL, et à l'utilisation des notions de conteneur et d'itérateur comme "schéma" de programmation (design pattern).

Le lecteur pourra alors aborder le chapitre sur les algorithmes pour réaliser la formidable puissance de la STL!

Page maintenue par Xavier Décoret. Valid XHTML 1.0! Valid CSS!