Adapter. STL (Teil 15)

Bewerten Sie diesen Artikel




Stapel, Programmierung für Anfänger

Eine separate Kategorie der Standard-Template-Bibliothek sind Adapter. Adapter - das ist kein neues Konzept oder Implementierung, und die Anpassung bestehender Konzepte Bibliothek für spezifische, häufig verwendete Ziel. Oft ist dies durch die Anpassung geschehen Einschränkungen die Funktionalität der grundlegenden Konzepte für die Adapteranforderungen. Die Bibliothek stellt den Behälteradapter, Iteratoren und Funktionen.

Der einfachste Weg, um zu zeigen,, Beide Adapter Beispiel Container-Adapter erscheinen: Stapel (Stapel), Warteschlange (Wende), priority_queue (Prioritätswarteschlange). Es ist bereits aus ihrer Inserate klar, dass:

  • Es ist weit verbreitet und häufig verwendeten Datenstrukturen;

  • Sie brauchen keine eigene Implementierung. Um sicherzustellen, dass ihre Funktionalität verwendet werden (anpassen) als Basis jeder von STL-Standardcontainer, was bietet Operationen wie push_back, Pop_Zurück oder pop_front (je nach Typ des Adapters);

  • Die "Extra" Transaktion im Arsenal des Basisbehälters sollte Adapter werden ausgeschlossen (nicht solche Versuchungen zu schaffen ..., Indexierungsvorgang, wenn der Vektor wird verwendet, um den Stapel zu adaptieren);

und, anstelle von umständlichen Template Syntax-Definitionen (Header-Dateien <Stapel>, <Warteschlange> und t. n.), Siehe Beispiel…

Lassen Sie uns von dem Stapel starten: im Stapel gekennzeichnet, dass der Zugang seiner Elemente können nur von einem Ende sein, die Oberseite des Stapels aufgerufen. Dies ist eine Sammlung von Daten,, funktioniert auf dem Prinzip der LIFO (Zuletzt rein, zuerst raus). Hier ist ein einfaches Beispiel wenig enthüllt alle Stack-Funktionalität:

Lassen Sie uns den Code zu analysieren und einige Schlussfolgerungen machen:

  • erste Definition Stapel<Schnur> (wir nutzen sie nicht auf) deklariert eine Variable Stapel, Strings, deren Elemente. Bitte beachten Sie, dass String-Objekte Container sind selbst STL. Auf diese Weise, Stapel können Elemente jeder Verschachtelung Behälter enthalten (das ist charakteristisch, und alle anderen STL Containern).

  • Diese Definition ( Stapel<Schnur> ) Sie können sehen,, eine Stapelbeschreibung in der Mehrzahl der Beispiele. Viele Autoren sind sich nicht bewusst, dass kann unterschiedlich sein. Aber wir werden eine andere Definition verwenden: Stapel< Schnur, Vektor<Schnur> > - Ein Stapel von Strings (entspricht weitgehend dem vorherigen), aber auf der Basisklasse Vektor gebaut<Schnur>. Als Basis kann verwendet werden,, beispielsweise, Vektor, Liste und und, oder sogar Ihre eigenen Container-Klasse, wachsenden Basis. Default (seit dem 1. Bestimmung) gebrauchte deque Basis. Manchmal sind die Leute fragen: warum nicht schreiben (definiert wie in der Umsetzung des Stapels): Stapel< Vektor<Schnur> > (Entfernen von doppelten Zeichenfolge)? Weil (und es ist durchaus möglich,) Diese Beschreibung ist eine ganz andere Art: Stapel Vektoren Zeit (sehen. oben Bemerkung über die strukturellen Verschachtelung Container).

  • Dann folgt Initialisierung Ausgangszustand Vektor von Strings. Mark, dass ein solcher Trick ist nur gültig in C ++ 11-Standard.

  • Als nächstes sehen wir fast alle Geschäftstätigkeit (Methoden), aus dem Stapel erforderliche: drücken() – Schieben eines Objekts auf dem Stapel, oben() – получение ссылки на элемент в вершине стека, Pop() – Auswerfen des oberen Elements, Größe() – die aktuelle Größe des Stapels, leer() – auf die Leere Check.

  • Es ist leicht zu verstehen,, Adapter Stapel verloren inhärenten Basis Behälter Methoden (beim(), [ ] usw.), aber erworben (Neudefinition) ihre eigenen (drücken(), Pop()).

Nun wollen wir sehen, was daraus geworden:

Stapel, Programmierung für Anfänger

mit einem Stapel von Elementar behandelt Nachdem alle Nun bewegen Sie nur die Analogie. Im Gegensatz zu stapeln – ist eine Sammlung von Daten,, funktioniert nach dem FIFO-Prinzip (Als Erster rein, als erster raus). (Es ist so ein "Rohr", von dem ein Ende etwas fließt, und dann von dem anderen Ende folgt.)

Sonderurlaub zum Beispiel ist die Warteschlange fast unverändert, Durchführen von Änderungen, gewünschte Sprache Semantik:

Von uns verlangt Änderung:

  • Die Linie kann nicht auf dem Basisvektor Behälter eingebaut werden, die kein Verfahren pop_front hat(), kann aber auf der Liste basieren, und, oder jeder andere Behälter, implementiert eine Reihe von grundlegenden Methoden (Vorderseite(), push_back(), pop_front()), standardmäßig und.

  • Es gibt keine Methode Warteschlange Adapter oben(), und ein Verfahren ähnlich import vorderen().

Und als Ergebnis bekommen wir (Vergleichen der Ergebnisse für den Stapel!):

Stapel, Programmierung für Anfänger

Newsletter neue Lektionen über die Programmierung:

Öl

Etwa Öl

praktische Erfahrungen über die Softwareentwicklung 40 Jahre. Lehrer Globale Logik internationales Softwareunternehmen. IBM Developer Works Permanent Autor von Publikationen. Wissenschaftliche Herausgeber der Computerliteratur-Verlag "Symbol-Plus", Sankt Petersburg.

Hinterlasse eine Antwort

Platz Code in Tags: <pre class="lang:c ++ dekodieren:true ">DEIN CODE</Vor>