STL-Containern zu lernen

June 5

Die STL-Container-Klassen stellen Programmierung, produktiv, sicher und robust. Sie sind intelligente Arrays, die Speicherreservierung automatisch ausführen, Größe ändern, können Sie die Variablen als Verweis übergeben, fügen Sie Elemente an irgendeinem Punkt, alle mit flammenden Effizienz. Sie bieten einen guten Grund zu C++ von C mit seiner dumm-Arrays wechseln. STL bietet zwei Arten von Containerklassen: einfach und assoziative, wo ein Schlüssel ist jede gespeicherte Objekt zugeordnet.

Anweisungen

1 Lesen Sie und optional merken Sie die zwei Kategorien von Containerklassen. Ihnen das Auswendiglernen nie niemandem weh und wird auf lange Sicht für Sie von Vorteil sein.

Einfache Container: Vektor-<> Listen <>, Stack <>, Warteschlange <>, Deque <>

Assoziative Container: Landkarte, <>, Set <>, multimap <> multiset <>

2 Erfahren Sie mehr über alle Container-Klassen, indem gezeigt wird, wie ein einfacher Behälter verwendet werden kann. In diesem Lernprogramm werden die Methoden der Vektor <> veranschaulichen.

3 Der Vektor eine Größe zuweisen. Sie können einen der überladenen Konstruktoren mit Vektorgröße zuweisen. Darüber hinaus können Sie die Methode reserve() oder assign(), nachdem Sie einen Vektor deklariert haben. Alle Methoden werden unten gezeigt:

Vektor-< Int > arr(50); Geben Sie die Kapazität

Vektor < Int > Arr (50, 17); Geben Sie die Kapazität an und geben Sie alle Elemente einen Standardwert (17)

Vektor-< Int > arr2(arr); einen Vektor aus einem anderen Vektor initialisieren

Vektor-< Int > Vec;

VEC.Reserve(100); oder verwenden Sie reserve(), um Speicher

4 Iterieren Sie über einen Vektor. Sie können dies tun, mit dem standard-Index-Operator [] oder über Iteratoren, mit die eine Besonderheit der STL sind. Ihre Fähigkeiten sind im Rahmen dieses Tutorials. Die folgenden Code-Schnipsel zeigen size(), begin() und end() Member:

Verwendung von Standardindizierung

für (Int i = 0; i < = vec.size(); i++) {}

Cout <}

Verwendung von Iteratoren

für (<> vector:: Iterator Iter = vec.begin(); Iter! = vec.end(); Iter ++) {}

Cout << * Iter <}

5 Fügen Sie ein Element am Ende, das Element zu entfernen, fügen Sie ein Element in der Mitte und die Containergröße zurück. Sie können alle diese Funktionen ausführen, mithilfe der push_back(), pop_back(), insert() und size() Methoden, bzw., wie unten gezeigt:

VEC.push_back(35);

VEC.pop_back();

VEC.Insert (pos 19); POS ist die Lage

Cout << vec.size() << Endl;

6 Löschen Sie die Elemente innerhalb eines Bereichs zu, löschen Sie den Rest der Elemente und stellen Sie sicher, dass der Vektor leer ist. In diesen Fällen verwenden Sie die Member-Funktionen erase() clear() und empty().

VEC.Erase(VEC.Begin() + 5, vec.end() - 5); Löschen Sie alle Elemente mit Ausnahme der ersten und letzten 5

VEC.Clear(); Löschen Sie alle Elemente

Wenn (true == vec.empty()) {...} / / prüfen, ob der Vektor leer ist

7 Schauen Sie sich die Memberfunktionen in Vektor-<> angeboten. Viele sind im Rest der Container-Klassen:

_Destroy(), _Eq(), _Lt(), _Ucopy(), _Ufill(), assign(), at(), begin(), Back, capacity(), clear(), empty(), end(), erase(), front(), get_allocator(), max_size(), insert(), Operator =, Operator [] pop_back(), push_back(), rbegin(), rend(), reserve(), resize(), size(), swap(), ~ vector().

8 Stellen Sie sicher, dass Sie die Headerdatei vector.h am oberen Rand der Quelldatei angeben, bevor Sie diesen Code für sich selbst testen. Jeder Containerklasse verfügt über eine eigene Headerdatei. Eine Liste <> list.h erfordert, eine Warteschlange <> erfordert queue.h, und so weiter.

Tipps & Warnungen

  • Die Containerklassen gehen hand in hand mit den Algorithmus-Funktionen, ein weiteres leistungsstarkes Feature der Standardvorlagenbibliothek.