User Tools

Site Tools


cpp:syntax:stl:container

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
cpp:syntax:stl:container [2021/04/07 08:13]
bmonsuez [La philosophie derrière les containeurs]
— (current)
Line 1: Line 1:
-====== Les containers dans la STL ====== 
- 
-Dans la STL est appellé "​container"​ une classe qui stocke plusieurs éléments d'un même type. 
- 
-===== La philosophie derrière les containeurs ===== 
- 
-L'​objectif est de fournir une interface commune à l'​ensemble des classes qui propose de stocker une collection d'​éléments d'un type donné. Cette uniformisation passe par certaines règles de fonctionnement. 
- 
-__**Règle n°1**__ : Le containeur est responsable de l'​allocation de la mémoire pour stocker les données dans le containeur. ​ 
- 
-Quand on ajoute un élément à un containeur, le containeur va créer la mémoire nécessaire pour stocker l'​objet et va recopier l'​objet passé dans ce nouvel emplacement mémoire en utilisation le constructeur ou l'​opérateur de recopie. 
- 
-Quand on détruit un élément du containeur, l'​objet est détruit et son constructeur est appelé. 
- 
-Enfin, cette règle a une conséquence importante, quand le containeur est détruit, tous les éléments qui sont dans le containeur sont détruits. 
- 
-__**Règle n°2**__ : Chaque containeur offre la possibilité d'​énumérer l'​ensemble des éléments stockés dans le containeur sans avoir à connaitre les détails d'​implantation du containeur. 
- 
-Cette énumération s'​effectue en parcourant la structure interne en utilisant ​ ([[cpp:​stl:​iterator|des itérateurs]]. Chaque collection va offrir les méthodes suivantes : 
- 
-| ''​begin()''​ | retourne un itérateur sur le premier élément situé dans le containeur .|  
-| ''​end()'' ​  | retourne un itérateur indiquant la fin de l'​énumeration.| ​ 
-| ''​rbegin()''​ | retourne un itérateur sur le dernier élément situé dans le containeur pour énumérer les élément en débutant par le dernier élément de la collection.| ​ 
-| ''​rend()'' ​  | retourne un itérateur indiquant la fin de l'​énumeration débutant par le dernier élément situé dans le containeur.| ​ 
- 
- 
- 
- 
-Nous retrouvons parmi les classes containers de la STL l'​ensemble des structure de données habituelles correspondant à des séquences d'​éléments ou au contraire des dictionnaires. ​ 
- 
- 
-===== Les containers par type ===== 
- 
-  * Séquence d'​éléments 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​array|array]] un tableau statique (de taille fixe). 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​vector|vector]] un tableau dynamique (de taille variable). 
- 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​vector|vector]] une structure permettant l'​insertion ou la suppression rapide des éléments soit au début soit à la fin de la séquence. 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​forward_list|forward_list]] une liste simplement chaînée. 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​forward_list|list]] une liste doublement chaînée. 
- 
-  * Les séquences d'​éléments ordonnés 
- 
-Dans ce cas, les éléments stockés dans la structure sont ordonnés. L'​énumération des éléments dans ce cas retourne les éléments en débutant par le plus petit et allant jusqu'​au plus grand. 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​set|set]] un ensemble d'​éléments ordonnés. 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​map|map]] un dictionnaire dont les éléments sont référencés et ordonnées par rapport à une clé qui identifie chaque élément. Cette structure supporte plusieurs occurences d'un même élément. 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​multiset|multiset]] un ensemble d'​éléments ordonnés. 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​multimap|multimap]] un dictionnaire dont les éléments sont référencés et ordonnées par rapport à une clé qui identifie chaque élément. Cette structure supporte plusieurs occurences d'un même élément. 
- 
-  * Les séquences d'​éléments non-ordonnés 
- 
-Dans ce cas, les éléments stockés dans la structure ne sont pas ordonnés. L'​énumération des éléments dans ce cas retourne les éléments dans un ordre arbitraire dépendant de l'​implantation. Les implantations standards utilisent des fonctions de hashages pour générer offrir un accès rapide aux données. 
- 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​unordered_set|unordered_set]] un ensemble d'​éléments ordonnés. 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​unordered_map|unordered_map]] un dictionnaire dont les éléments sont référencés et ordonnées par rapport à une clé qui identifie chaque élément. Cette structure supporte plusieurs occurences d'un même élément. 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​unordered_multiset|unordered_multiset]] un ensemble d'​éléments ordonnés. 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​unordered_multimap|unordered_multimap]] un dictionnaire dont les éléments sont référencés et ordonnées par rapport à une clé qui identifie chaque élément. Cette structure supporte plusieurs occurences d'un même élément. 
- 
-  * Les adaptateurs 
- 
-Un adaptateur fournit une surcouche qui ajouter à un containeur gérant des sequences d'​éléments une interface pour utiliser cette structure comme une pile, une queue ou une queue avec priorité. 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​stack|stack]] offre une interface de type pile (structure LIFO). 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​queue|queue]] offre une interface de type queue (structure FIFO). 
- 
-[[https://​en.cppreference.com/​w/​cpp/​container/​priority_queue|priority_queue]] offre une interface de type queue avec priorité. 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
  
cpp/syntax/stl/container.1617783210.txt.gz · Last modified: 2021/04/07 08:13 by bmonsuez