Seit C++11 gibt es den neuen Standardcontainer std::array
. Wir sehen uns an, wie dieser verwendet werden kann. Im Gegensatz zu std::vector
ist std::array
kein dynamischer Datentyp. Seine Größe kann zur Laufzeit nicht verändert werden. Methoden wie push_back()
oder pop_back()
sind für diesen Container nicht implementiert.
Für die Ausführung unseres Beispiels ist es zunächst notwendig die entsprechenden Header einzubinden. Anschließend sehen wir uns die Initialisierung an. Wir legen ein neues Array vom Typ float an. Die Angabe zweier geschwungener Klammern nach dem Variablennamen führt dazu, dass alle Array Elemente mit null initialisiert werden. Zur Überprüfung geben wir die Elemente mit einer for Schleife aus.
Im nächsten Abschnitt initialisieren wir ein int – und ein double Array. Bei intArray
wurde bewusst auf die manuell Initialisierung des letzten Elementes verzichtet. Dieses wird nun automatisch auf null gesetzt. Dazu später mehr.
Für die Ausgabe wird einmal die Funktion at()
verwendet und einmal der Arrayoperator []
. Der Arrayoperator ist effizienter im Zugriff, jedoch bietet at()
einen Schutz vor einem Pufferüberlauf. Wird mit at()
auf ein Element zugegriffen, das außerhalb des Arrays liegt, wird eine Exception ausgelöst.
Im letzten Abschnitt verändern wir die Werte von doubleArray
innerhalb einer for Schleife Alle Elemente von doubleArray
werden mit allen Werten von intArray
addiert. Auch hier wird einmal die Funktion at()
und einmal der Arrayoperator verwendet. In der Praxis ist es nicht unbedingt ratsam diese zu mischen, es ist jedoch prinzipiell möglich.
Bei der Ausgabe von doubleArray
sehen wir, dass sich alle Werte bis auf den letzten verändert haben. Es ist erkennbar, dass bei der Erzeugung von intArray
, das letzte Element wirklich mit null initialisiert wurde. Daher hat die Addition den Wert 5.5 nicht verändert.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <iostream> // std::cout #include <array> // std::array int main() { // alle Werte mit 0 initialisieren std::array<float, 5> floatArray {}; // Werte von floatArray ausgeben for (auto &it : floatArray) { std::cout << it << " "; } std::cout << std::endl; // vier Werte einzeln initialisieren für int std::array<int, 5> intArray {1,1,1,1}; // alle Werte einzeln initialisieren für double std::array<double, 5> doubleArray {1.1, 2.2, 3.3, 4.4, 5.5}; // Ausgabe einzelner Elemente std::cout << doubleArray.at(0) << " " << doubleArray[1] << std::endl; // Werte von doubleArray mit Werten von intArray addieren for (int it = 0; it < doubleArray.size(); ++it) { doubleArray.at(it) += intArray[it]; } // Werte von doubleArray ausgeben for (auto &it : doubleArray) { std::cout << it << " "; } std::cout << std::endl; return 0; } |
Das Beispiel enthält C++11 spezifische Elemente. Wir compilieren mit folgendem Befehl:
g++ -std=c++11 cpp_std_array.cpp
Ausgabe nach Ausführung von ./a.out
:
0 0 0 0 0
1.1 2.2
2.1 3.2 4.3 5.4 5.5
Das komplette Beispiel herunterladen: cpp_std_array.zip
Hinterlasse jetzt einen Kommentar