Partager via


Conteneurs STL

La Bibliothèque de modèles Standard (STL, Standard Template Library) ISO fournit des conteneurs pour stocker des collections d'objets connexes. Les conteneurs sont des classes de modèles qui permettent la spécification d'objets autorisés dans les conteneurs.

Notes

Cet article ne s'applique pas à la bibliothèque STL/CLR.Pour plus d'informations, consultez Référence de bibliothèque STL/CLR.

Les conteneurs de la bibliothèque STL peuvent être divisés en trois catégories : les conteneurs de séquence, les conteneurs associatifs et les adaptateurs de conteneur.

Conteneurs de séquence

Les conteneurs de séquence conservent l'ordonnancement des éléments insérés que vous spécifiez.

Un conteneur vector se comporte comme un tableau, mais il peut croître automatiquement selon les besoins. Il est en accès aléatoire et à stockage contigu, et sa longueur est hautement flexible. Pour ces raisons, entre autres, vector est le conteneur de séquence par défaut pour la plupart des applications. Pour plus d'informations, consultez vector, classe.

Un conteneur array possède certains des avantages de vector, mais sa longueur n'est pas très flexible. Pour plus d'informations, consultez array, classe (STL).

Un conteneur deque (file d'attente double) autorise les insertions et les suppressions rapides au début et à la fin du conteneur. Il partage les avantages offerts par l'accès aléatoire et la longueur flexible de vector, mais il n'est pas contigu. Pour plus d'informations, consultez deque, classe.

Un conteneur list est une liste à double liaison qui permet un accès bidirectionnel, des insertions rapides et des suppressions rapides n'importe où dans le conteneur, mais vous ne pouvez pas accéder de manière aléatoire à un élément du conteneur. Pour plus d'informations, consultez list, classe.

Un conteneur forward_list est une liste à liaison unique, la version à accès direct de list. Pour plus d'informations, consultez forward_list, classe.

Conteneurs associatifs

Dans les conteneurs associatifs, les éléments sont insérés dans un ordre prédéfini, par exemple par ordre croissant. Des conteneurs associatifs non ordonnés sont également disponibles. Les conteneurs associatifs peuvent être regroupés dans deux sous-ensembles : les maps et les sets.

Un map, parfois appelé dictionnaire, se compose d'une paire clé/valeur. La clé est utilisée pour trier la séquence et la valeur est associée à cette clé. Par exemple, un map peut contenir des clés qui représentent chaque mot unique dans un texte et des valeurs correspondantes qui représentent le nombre de fois que chaque mot apparaît dans le texte. La version non ordonnée de map est unordered_map. Pour plus d'informations, consultez map, classe et unordered_map, classe.

Un set est simplement un conteneur croissant d'éléments uniques. La valeur est également la clé. La version non ordonnée de set est unordered_set. Pour plus d'informations, consultez set, classe et unordered_set, classe.

map et set autorisent l'insertion d'une seule instance d'une clé ou d'un élément dans le conteneur. Si plusieurs instances d'éléments sont nécessaires, utilisez multimap ou multiset. Les versions non ordonnées sont unordered_multimap et unordered_multiset. Pour plus d'informations, consultez multimap, classe, unordered_multimap, classe, multiset, classe et unordered_multiset, classe.

Les maps et les sets ordonnés prennent en charge les itérateurs bidirectionnels et leurs équivalents non ordonnés prennent en charge les itérateurs vers l'avant. Pour plus d'informations, consultez Itérateurs.

Adaptateurs de conteneur

Un adaptateur de conteneur est une variante d'un conteneur de séquence ou associatif qui restreint l'interface à des fins de simplicité et de clarté. Les adaptateurs de conteneur ne prennent pas en charge les itérateurs.

Un conteneur queue suit la sémantique FIFO (premier entré, premier sorti). Le premier élément qui fait l'objet d'un push (autrement dit, qui est inséré dans la file d'attente) est le premier à être dépilé (autrement dit à être supprimé de la file d'attente). Pour plus d'informations, consultez queue, classe.

Un conteneur priority_queue est organisé de telle façon que l'élément qui a la valeur la plus élevée soit toujours le premier dans la file d'attente. Pour plus d'informations, consultez priority_queue, classe.

Un conteneur stack suit la sémantique LIFO (dernier entré, premier sorti). Le dernier élément inséré sur la pile est le premier élément dépilé. Pour plus d'informations, consultez stack, classe.

Les adaptateurs de conteneur ne prenant pas en charge les itérateurs, ils ne peuvent pas être utilisés avec les algorithmes STL. Pour plus d'informations, consultez Algorithmes.

Spécifications pour les éléments de conteneurs

En général, les éléments insérés dans un conteneur STL peuvent être de presque n'importe quel type d'objet s'ils peuvent être copiés. Les éléments qui ne peuvent qu'être déplacés, par exemple ceux tel que vector<unique_ptr<T>> et qui sont créés à l'aide de unique_ptr<> fonctionnent tant que vous n'appelez pas de fonctions membres qui essaient de les copier.

Le destructeur n'est pas autorisé à lever une exception.

Les conteneurs associatifs ordonnés (décrits plus haut dans cet article) doivent avoir un opérateur de comparaison public défini. (Par défaut, l'opérateur est operator<, mais même les types qui ne fonctionnent pas avec operator< sont pris en charge.)

Certaines opérations sur les conteneurs peuvent également nécessiter un constructeur public par défaut et un opérateur d'équivalence public. Par exemple, les conteneurs associatifs non ordonnés nécessitent la prise en charge de l'égalité et du hachage.

Accès aux éléments de conteneurs

Les éléments des conteneurs sont accessibles à l'aide d'itérateurs. Pour plus d'informations, consultez Itérateurs.

Notes

Vous pouvez également utiliser des boucles for basées sur une plage pour itérer sur des collections STL.

Voir aussi

Référence

Bibliothèque STL (Standard Template Library)

<sample container>

Sécurité des threads dans la bibliothèque standard C++

Concepts

Conteneurs (Modern C++)