C++ bietet verschiedene Container, um Elemente desselben Typs in einer festen Reihenfolge zu speichern. Für Container mit fester Größe gibt es std::array, und std::vector lässt sich dynamisch in der Größe anpassen.
Wenn du ein Array oder einen Vektor deklarierst, musst du den Typ der Elemente angeben, die der Container aufnimmt. Arrays brauchen außerdem eine Größe. Schau dir diese Beispiele an, um die Initialisierung der beiden Containertypen zu sehen:
#include <array>
#include <string>
// std::array<element_type, size> variable_name {list of elements}
std::array<std::string, 3> indie_rock {"yeah", "yeah", "yeah"};
// indie_rock contains the elements "yeah" three times
Vektoren belegen meist mehr Speicher, weil sie Platz für weiteres Wachstum reservieren. Du musst keine Größe angeben:
#include <vector>
// std::vector<element_type> variable_name {list of elements}
std::vector<int> countdown {3, 2, 1};
// my_vector contains the elements 3, 2 and 1
Hinweis: Die genauen Hintergründe des Template-Konzepts musst du noch nicht kennen, es bekommt weiter unten im Lehrplan ein eigenes Konzept.
Vektoren und Arrays teilen sich dieselben Funktionen für den Zugriff auf ihre Elemente.
Mit den Memberfunktionen front und back bekommst du das erste und das letzte Element des Containers.
Außerdem gibt es at und den []-Operator, um auf bestimmte Elemente zuzugreifen.
countdown[0];
// => 3
countdown.at(2);
// => 1
countdown[1] = 4;
// countdown now contains 3, 4 and 1
indie_rock.back() = "yeahs";
// indie_rock is now "yeah", "yeah", "yeahs"
Hinweis: Wenn du eine Position wählst, die außerhalb des Bereichs deines Containers liegt, kann
[]zu undefiniertem Verhalten führen. Die Funktionatwürde eine Ausnahme auslösen, was dir auf lange Sicht das Leben leichter machen könnte.
Da ein vector nicht in seiner Größe festgelegt ist, kannst du Elemente hinzufügen oder entfernen.
Zwei häufig verwendete Funktionen dafür sind emplace_back und pop_back.
std::vector<std::string> witches {"Holly", "Alyssa", "Shannen"};
witches.pop_back();
// Shannen is no longer with the witches
witches.emplace_back("Rose");
// Rose has joined the team
Mit der Memberfunktion empty kannst du prüfen, ob ein Container leer ist.
Wenn du die Anzahl der Elemente wissen willst, kannst du size verwenden.