Adaptateurs. STL (partie 15)




empiler, programmation pour les débutants

Une catégorie distincte de bibliothèque de modèle standard sont adaptateurs. Adaptateurs - ce n'est pas un nouveau concept ou la mise en œuvre, et l'adaptation des concepts existants bibliothèque pour spécifique, cible couramment utilisé. Souvent, cela se fait à travers l'adaptation restrictions la fonctionnalité des concepts de base pour les demandes d'adaptation. La bibliothèque présente l'adaptateur de récipient, itérateurs et fonctions.

La meilleure façon de montrer, apparaissent tous deux adaptateurs exemple adaptateurs conteneurs: empiler (cheminée), queue (tour), priority_queue (file d'attente prioritaire). Déjà il est clair à partir de leurs listes, que:

  • Il est largement et couramment utilisé des structures de données;

  • Ils ne nécessitent pas de mise en œuvre séparée. Pour assurer leur fonctionnalité peut être utilisée (adapter) en tant que base tout à partir de conteneurs standard STL, qui fournit des opérations telles que repousser, pop_arrière ou pop_front (en fonction du type d'adaptateur);

  • L'opération «extra» dans l'arsenal du conteneur de base devrait être exclue adaptateur (de ne pas créer de telles tentations ..., réindexation, si le vecteur est utilisé pour adapter la pile);

et, au lieu de définitions de syntaxe de modèle encombrants (fichiers d'en-tête <empiler>, <queue> et t. n.), Reportez-vous à l'exemple…

Commençons par la pile: caractérisé en pile, que l'accès à ses éléments ne peut être que d'un bout, appelé le sommet de la pile. Ceci est une collection de données, fonctionnant sur le principe de LIFO (Dernier entré, premier sorti). Voici un exemple simple révèle peu tous fonctionnalité de la pile:

Laissez-nous analyser le code et faire quelques conclusions:

  • première définition empiler<chaîne> (nous ne l'utilisons pas sur) déclare une pile de variable, dont les éléments sont des chaînes. S'il vous plaît noter, que objets chaîne sont eux-mêmes conteneurs STL. ainsi, pile peut contenir des éléments de tous les contenants de nidification (qui est caractéristique de, et tous les autres conteneurs STL).

  • cette définition ( empiler<chaîne> ) vous pouvez voir, une description de la pile dans la plupart des exemples. Beaucoup d'auteurs ne sont pas conscients, qui peut être différent. Mais nous allons utiliser une définition différente: empiler< chaîne, vecteur<chaîne> > - Une pile de chaînes (largement équivalente à la précédente), mais construit sur le vecteur de classe de base<chaîne>. En tant que base peut être utilisée, par exemple, vecteur, liste et et, ou même votre propre classe de conteneur, base croissante. par défaut (depuis le 1er déterminant) base de deque utilisé. Parfois, les gens demandent: pourquoi ne pas écrire (définis comme dans la mise en oeuvre de la pile): empiler< vecteur<chaîne> > (suppression de dupliquer la chaîne)? parce que (et il est tout à fait possible) Cette description est un type tout à fait différent: cheminée vecteurs temps (voir. ci-dessus remarque sur les conteneurs structurels de nidification).

  • suit initialisation vecteur d'état initial de chaînes. marque, qu'une telle astuce est valable uniquement en 11 standard C.

  • Ensuite, nous voyons presque tous opérations (méthodes), nécessaire de la pile: pousser() – poussant d'un objet sur la pile, sommet() – l'obtention d'une référence à un élément dans la partie supérieure de la pile, pop() – l'éjection de l'élément supérieur, Taille() – la taille actuelle de la pile, vide() – sur le chèque annulé.

  • Il est facile de comprendre, adaptateur pile perdu inhérente base Modes de conteneur (à(), [ ] et al.), mais acquise (redéfinition) leur propre (pousser(), pop()).

Maintenant, nous allons voir ce qui en est sorti:

empiler, programmation pour les débutants

Après avoir traité avec une pile de élémentaire Maintenant il suffit de déplacer l'analogie à tous. Contrairement à la pile – est un ensemble de données, fonctionnant selon le principe FIFO (Premier entré, premier sorti). (Il est un "pipe", une extrémité de laquelle coule quelque chose, puis à partir de l'autre extrémité suit.)

Un congé spécial par exemple, la file d'attente est presque inchangée, les modifications à apporter, sémantique du langage requis:

De nous, le changement demandé:

  • La ligne ne peut pas être construite sur le conteneur de vecteur de base qui n'a pas une méthode pop_front(), mais peut être basée sur la liste, et, ou tout autre récipient, met en œuvre un ensemble de base des méthodes (avant(), repousser(), pop_front()), par défaut et.

  • Il n'y a pas top méthode de l'adaptateur de file d'attente(), et une méthode similaire avant l'importation().

Et par conséquent, nous obtenons (comparer les résultats pour la pile!):

empiler, programmation pour les débutants

Bulletin de nouvelles leçons sur la programmation:

Adaptateurs. STL (partie 15)
2.5 (50%) 2 votes

Sur huile

une expérience pratique sur le développement de logiciels 40 ans. société de logiciels internationale Global Teacher Logic. IBM Developer Works auteur permanent des publications. éditeur scientifique de l'ordinateur littérature maison d'édition "Symbole-Plus", Saint-Pétersbourg.

Laisser un commentaire

Votre adresse email ne sera pas publiée. les champs requis sont indiqués *