Контейнеры STL. Teil 2

Bewerten Sie diesen Artikel




контейнеры C ++ STL , Standard Template Library, c ++ Behälter, Vektor

STL Es enthält eine Reihe von Konzepten und Datenstrukturen, dass in fast allen Fällen erlauben erheblich vereinfachen Code. Wir führen die Kategorie folgende Konzepte:

  1. Behälter - Speicherung von einer Menge von Objekten im Speicher.

  2. Iterator - Mittel für den Zugang zu den Inhalten der einzelnen Objekte in dem Behälter.

  3. Algorithmus - Identifizierung der meisten Standard-Berechnungsverfahren für Container.

  4. Adapter - Anpassung der Hauptkategorien für die am häufigsten verwendeten Schnittstellen (wie beispielsweise ein Stapel oder eine Warteschlange).

  5. Funktors (funktionelle Einheit) - Verschweigen Funktion in einem Objekt, um es in anderen Kategorien zu verwenden,.

Bibliothek STL - Dies ist ein sehr großes Gebiet. Ihre Beschreibung des Buches sind mit dem ganzen Menschen gewidmet (Eines der besten Bücher in russischer Sprache, ausreichend für die Entwicklung von STL ausführlich, Es befindet sich am Ende des Textes gezeigt). wir, wegen des Anfangsniveaus der Liebe, STL-Technik intuitiv klar Beispiele betrachten.

Syntax STL Es basiert auf der Verwendung der Syntax von C ++ als Vorlagen (Vorlagen) Klassen und Funktionsschablonen. Aber für die erfolgreiche Anwendung der Technologie STL nicht unbedingt ein tiefes Verständnis für Technologie Vorlagen.

Das zentrale Konzept STL, um die sich alles andere dreht, Das Behälter (Weitere Verwendung des Begriffs Sammlung). Container - eine Sammlung von einer Anzahl von ähnlichen Elementen, in einem Behälter in einer bestimmten Weise verpackt. Nur ein Prototyp Behälter zur klassischen Sprache ist C ++ Feld. die Art und Weise, die Elemente werden in den Behälter gepackt, Er bestimmt die Art des Behälters und das Verhalten von Elementen in einem Behälter. STL Es führt eine Reihe von verschiedenen Arten von Behältern:

  • aufeinanderfolgende Behälter - Vektor (Vektor), doppelt verknüpfte Liste (Liste), DEK (und);

  • assoziative Container - Sets (Set und multiset ), hashtable (Karte und Multimap);

  • Pseudo-Container - Bitmaps (bitset), Linien (Schnur und wstring), Arrays (valarray);

Wir freuen konsequent bei den Beispielen der Verwendung des Hauptbehälters, von einfacher bewegen zu komplexeren. Die einfachste Art von ihnen ist Vektor. Nächstgelegene Prototypvektor ist ein Array von C ++. Aber die Größe des Vektors in jedem Moment dynamisch Operationen Hinzufügen ändern (Verfahren push_back()) oder ein Element zu löschen. gleiche, als Array, wir können zu einem beliebigen Elementvektor Indexierungsvorgang drehen [n]. Dies ist die erste, die Oberflächenschicht des Wissens über Vektor, die es uns ermöglicht, mit ihm zu arbeiten:

Beschreibung Vektor<schweben> (dies ist die bereits erwähnte Vorlage die Klassenbeschreibung) erklärt im Code Objekt Feld: Vektorelemente vom Typ schweben.

Als nächstes werden wir solche Klassenmethoden sehen Vektor<schweben>, wie maximale Größe() - Die maximal mögliche Länge der Vektoren im Allgemeinen (Umsetzung einer konstanten); Größe() - Die aktuelle Größe (die Anzahl der Elemente) Vektor; Kapazität() - Die aktuelle Kapazität des Vektors (die maximale Anzahl der Elemente, die in einem Vektor kann es in der aktuellen Platzierung platziert). dieses Fragment tun gibt so etwas wie die folgenden (Details finden Sie auf der Implementierung variieren je):

контейнеры C ++ STL , Standard Template Library, c ++ Behälter, Vektor

Hier können Sie ganz interessant Vektor Verhalten sehen (in diesem Sinne und): beim Hinzufügen des nächsten Elements, Kapazität Vektor ist nicht genug, erledigt neu Vektor-Unterkunft, die doppelte Kapazität für ihn zu reservieren (mit einer Marge, die Zugabe eines neuen Elements ist, nicht einmal die neue Neuzuteilung erforderlich).

Also haben wir das Äquivalent eines Arrays C ++, die Größe (Größe()) Änderungen in willkürlichen Einheiten von wenigen bis zu Millionen von Elementen hin. achten (Es ist sehr wichtig), dass die Größe des Vektors Erhöhung erreicht wird nicht Indexierung über seine aktuelle Größe, und "zatalkivaniem» (Verfahren push_back()) neues Element in der Ende Vektor. Eine andere Möglichkeit, die Größe des Vektors zu ändern - ist es, Methoden zu nennen Größe ändern(). Genau deshalb, für den Vektor bereitgestellt 2 unterschiedlich Verfahren zum Indexieren: Betrieb [n] und eine Methodenfunktion beim(n). Verfahren beim() überprüft die aktuelle Größe des Vektors Größe(), und Indizierung arbeitet für seine Grenzen Ausnahme (das ist ein Fehler!). vor, Indexierungsvorgang ist nicht Grenzkontrollen, unsicher, aber es ist schneller.

контейнеры C ++ STL , Standard Template Library, c ++ Behälter[1] Scott Meyers, Effektive Nutzung von STL, "Peter" in St. Petersburg. 2002, ISBN: 5-94723-382-7, 244 pp. Auf dem Link lesen Online-Buch.

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>