Que sont conteneurs/adaptateurs?
Quelqu'un s'il vous plaît expliquer dans la langue du profane .
J'ai essayé de chercher sur Internet mais les définitions et explications sont trop techniques et difficiles à comprendre.
J'ai une connaissance de base du C++ et de ses sous-sujets comme (classe/modèles/STL).
MODIFIER 1:
Quelqu'un peut-il me donner un exemple pratique d'application de conteneurs/adaptateurs?
Juste pour une meilleure compréhension :-)
Je vous remercie.
<joke>
C++ est technique et difficile à comprendre: -D</joke>
Les conteneurs sont des types de données de STL qui peuvent contenir des données.
Exemple: vector
en tant que tableau dynamique
Les adaptateurs sont des types de données de STL qui adaptent un conteneur pour fournir une interface spécifique.
Exemple: stack
fournissant une interface de pile au-dessus du conteneur choisi
(note latérale: les deux sont en fait des modèles et non des types de données, mais la définition semble meilleure de cette façon)
Un conteneur est une structure de données spécifique qui contient des données, généralement en quantité illimitée. Chaque type de conteneur a des limites sur la façon d'accéder, d'ajouter ou de supprimer efficacement des données.
Voici quelques exemples de conteneurs utilisant des classes STL.
Voici les conteneurs de séquences, ce qui signifie que les données sont classées de manière fiable (c'est-à-dire qu'il y a un recto et un verso. Je ne veux pas dire qu'elles se trient automatiquement!).
Ce sont des conteneurs associatifs, ce qui signifie que les éléments ne sont plus ordonnés mais ont plutôt des associations entre eux utilisés pour déterminer l'unicité ou les mappages:
Les adaptateurs de conteneur, d'autre part, sont des interfaces créées en limitant la fonctionnalité dans un conteneur préexistant et en fournissant un ensemble différent de fonctionnalités. Lorsque vous déclarez les adaptateurs de conteneur, vous avez la possibilité de spécifier quels conteneurs de séquence forment le conteneur sous-jacent. Ceux-ci sont:
Voir cette page de référence pour plus d'informations, y compris la complexité temporelle pour chacune des opérations et des liens vers des pages détaillées pour chacun des types de conteneurs.
La définition technique du "conteneur" de La documentation SGI STL est assez bonne:
Un conteneur est un objet qui stocke d'autres objets (ses éléments) et qui a des méthodes pour accéder à ses éléments. En particulier, chaque type qui est un modèle de conteneur a un type d'itérateur associé qui peut être utilisé pour parcourir les éléments du conteneur.
Ainsi, un conteneur est une structure de données qui contient ("contient") une collection d'objets d'un certain type. L'idée clé est qu'il existe différents types de conteneurs, chacun d'entre eux stockant des objets d'une manière différente et offrant des caractéristiques de performances différentes, mais tous ont une interface standard de sorte que vous pouvez échanger les uns contre les autres facilement et sans trop modifier du code qui utilise le conteneur. L'idée est que les conteneurs sont conçus pour être interchangeables autant que possible.
Les adaptateurs de conteneur sont des classes qui fournissent un sous-ensemble des fonctionnalités d'un conteneur, mais peuvent fournir des fonctionnalités supplémentaires qui facilitent l'utilisation des conteneurs pour certains scénarios. Par exemple, vous pouvez facilement utiliser std::vector
ou std::deque
pour une structure de données de pile et appelez Push_back
, back
et pop_back
comme interface de pile; std::stack
fournit une interface qui peut utiliser un std::vector
ou std::deque
ou un autre conteneur de séquence mais fournit les fonctions membres Push
, top
et pop
plus standard pour accéder aux membres.