std::vector in C++11 verwenden

Im aktuellen Beitrag befassen wir uns mit der Verwendung des dynamischen Containers std::vector. Dieser kann im Gegensatz zu std::array zur Laufzeit vergrößert und verkleinert werden.

Zuerst binden wir wie gewohnt die benötigten Header Dateien ein:

Innerhalb unserer main() Funtion initialisieren wir zunächst den vector iVector und legen seine Größe mit zehn Elementen fest. Der Typ vector setzt standardmäßig alle Elemente auf den Wert null. Wir können nun den Wert einzelner Elemente manuell verändern. Wie bei den anderen Standard Containern ist dies möglich mit Hilfe der Funktion at() oder mit dem Arrayoperator []. Für die Ausgabe von iVector verwenden wir das Schlüsselwort const, da wir nur lesend auf den Container zugreifen wollen. Die Ausgabe zeigt, dass nach den manuell gesetzten Elementen  alle restlichen den Wert null haben.

10 11 12 0 0 0 0 0 0 0

Wie bereits im Artikel zu std::array erwähnt, bietet die Funktion at() Schutz vor einem etwaigen Speicherüberlauf. Mit Hilfe einer Ausnahmebehandlung können wir sicher überprüfen, ob es möglich ist, auf ein bestimmtes Element lesend oder schreibend zuzugreifen. In unserem Fall versuchen wir den Wert des 11ten Elementes zu verändern. Da iVector jedoch nur zehn Elemente hat, wird die Ausnahme std::out_of_range abgefangen und die entsprechende Fehlermeldung ausgegeben.

vector::_M_range_check: __n (which is 10) >= this->size() (which is 10)

Im nächsten Beisiel verändern wir die Größe von iVector. Zunächst fügen wir ein Element mit dem Wert 20 hinzu (push_back(20)). Nun ist es möglich auf das 11te Element lesend zuzugreifen. Anschließend verkleinern wir den Container mit pop_back(). Durch die Ausgabe der Größe des Containers mit size() erkennen wir, dass sich die Länge zuerst um eins erhöht und dann wieder verringert.

20
Vector Size: 11
Vector Size: 10

Zu Schluss sehen wir uns eine weitere Methode der Initialisierung an. Wenn wir einen vector mit mehreren Elementen erstellt haben, kann dessen Inhalt für Erstellung eines weiteren vectors verwendet werden. Dazu stehen die Iteratoren std:begin() und std::end() zur Verfügung. Diese zeigen auf den Beginn bzw. das Ende eines Containers. Schreiben wir diese nun in unsere Initialisierungsliste von cVector_copy wir damit der gesamte Inhalt von cVector übernommen. Dies wird durch die Ausgabe von cVector_copy erkennbar.

Werden nicht alle Elemente des originalen Containers benötigt, kann die genaue Anzahl spezifiziert werden. Für die Erzeugung von fVector_copy werden nur zwei Elemente von fVector übernommen. Dies wird durch die Parameter fVector.begin() + 1 und fVector.begin() + 3 festgelegt. Wir beginnen mit dem Kopieren erst nach dem ersten Element von fVector und stoppen beim dritten Element. Somit werden bei der anschließenden for Schleife nur die Werte 2.2 und 3.3 ausgegeben.

10 20 30 40 50 60
2.2 3.3

Die Compilierung des Beispieles erfolgt mit:

g++ -std=c++11 cpp_std_vector.cpp

Das komplette Beispiel herunterladen: cpp_std_vector.zip

Über Anton Neururer 31 Artikel
Ich bin Programmierer und Blogger. Themen die mich besonders interessieren sind Python, C++ und Javascript. Des Weiteren befasse ich mich mit Fraktalen.

Hinterlasse jetzt einen Kommentar

Kommentar hinterlassen