Grundlagen für das Projekt (Teil 2)
4. VECTOR: Flexible Arrays erzeugen
Worum geht es?
Im letzten Modul hast du Arrays als eine einfache Möglichkeit kennen gelernt, Daten des gleichen Typs unter einem gemeinsamen Namen zu speichern und einzelne Elemente über einen Index anzusprechen. Dieses eigentlich sehr praktische Konstrukt hat aber leider einige sehr schwerwiegende Nachteile:
- Die Größe von Arrays muss zur Compilezeit (d.h. beim Programmieren) festgelegt werden.
- Zur Laufzeit (d.h. bei der Ausführung) können Arrays weder vergrößert noch verkleinert werden.
- Ein Array weiß nicht, wie viele Elemente in ihm gespeichert sind.
- Arrays verfügen über keine Mechanismen zur Fehlerprüfung (z.B. bei einem ungültigen Index). Dafür bist du verantwortlich.
- Das Einfügen von Elementen z.B. in die Mitte des Arrays ist mit größerem Progammieraufwand verbunden, den du leisten musst.
Da sich diese Liste noch weiter fortsetzen ließe, wird es Zeit, dass du eine Alternative zu den klassischen Arrays in C++ kennen lernst: Die Klasse vector.
Mit dieser in 2003 eingeführten Datenstruktur ist es möglich, Elemente eines beliebigen Typs in einer dynamisch erweiterbaren Liste zu speichern. Die Länge eines Vektors kann zur Laufzeit angepasst werden und es ist zu jeder Zeit bekannt, wie viele Elemente darin gespeichert sind. Außerdem lassen sich mit Vektoren einige sehr nützliche Zusatzfunktionen nutzen, wie z.B. das Sortieren von Elementen nach ihrer Größe.
Einen Vektor zu definieren ist zwar sehr einfach, allerdings musst du dich dabei an eine neue Schreibweise gewöhnen. In diesem ersten Beispiel ist gezeigt, wie das funktioniert.
Was kannst du danach?
- Vektoren auf verschiedene Arten definieren und mit Elementen initialisieren.
#include <iostream> #include <string> #include <vector> using namespace std; int main() { // Definition von Vektoren std::vector<char> v0; // #include <vector> vector<int> v1{1, 2, 3, 4, 5}; vector<string> v2{"Hallo", "Welt"}; vector v3{3.14, 2.45}; // ohne Typ seit C++17 // vector v4{"Hallo", 3}; // Fehler: versch. Typen return 0; }
Dieser Code erzeugt zwar keine Ausgaben, aber du hast hier die Möglichkeit, mit verschiedenen Arten zur Definition von Vektoren zu experimentieren. Achte dabei besonders auf Fehlermeldungen.