vector ·
array ·
list ·
map ·
set ·
stack / queue
Die STL bietet eine Vielzahl von Containern für die Verwaltung von Daten – von dynamischen Arrays über assoziative Container bis zu Adaptern. Diese Cheatsheet fasst die wichtigsten zusammen.
vector ist der vielseitigste Container der STL – ein dynamisches Array mit wahlfreiem Zugriff. Die Größe kann zur Laufzeit wachsen und schrumpfen.
| Methode | Beschreibung | Komplexität |
|---|---|---|
| push_back(val) | Element am Ende hinzufügen | O(1) amortisiert |
| pop_back() | Letztes Element entfernen | O(1) |
| size() | Anzahl der Elemente | O(1) |
| capacity() | Reservierter Speicher | O(1) |
| reserve(n) | Speicher für n Elemente reservieren | O(n) |
| resize(n) | Größe auf n ändern | O(n) |
| at(index) | Zugriff mit Bereichsprüfung | O(1) |
| begin() / end() | Iteratoren für Schleifen | O(1) |
reserve(), wenn Sie die ungefähre Größe kennen – das vermeidet mehrfache Speicher-Neuallokationen und verbessert die Performance.
std::array ist ein Container mit fester Größe (zur Kompilierzeit bekannt). Er kombiniert die Performance von C-Arrays mit der Sicherheit der STL-Container.
| Methode | Beschreibung |
|---|---|
| size() | Anzahl der Elemente (constexpr) |
| empty() | Prüft, ob Array leer ist (immer false) |
| at(index) | Zugriff mit Bereichsprüfung |
| begin() / end() | Iteratoren für Schleifen |
| fill(value) | Alle Elemente mit value befüllen |
| data() | Zeiger auf die zugrunde liegenden Daten |
std::array anstelle von C-Arrays int arr[5] – es bietet STL-Methoden, ist typsicherer und funktioniert mit allen STL-Algorithmen.
list ist eine doppelt verkettete Liste. Sie ermöglicht schnelle Einfügungen und Löschungen an beliebigen Positionen – jedoch keinen wahlfreien Zugriff.
| Methode | Beschreibung | Komplexität |
|---|---|---|
| push_front(val) | Element am Anfang einfügen | O(1) |
| push_back(val) | Element am Ende einfügen | O(1) |
| pop_front() | Erstes Element entfernen | O(1) |
| pop_back() | Letztes Element entfernen | O(1) |
| insert(it, val) | Element an Position einfügen | O(1) |
| erase(it) | Element an Position löschen | O(1) |
| size() | Anzahl der Elemente | O(1) |
list ist ideal, wenn Sie häufig an beliebigen Positionen einfügen/löschen. Für wahlfreien Zugriff verwenden Sie vector.
map ist ein assoziativer Container, der Schlüssel-Wert-Paare sortiert nach dem Schlüssel speichert. Jeder Schlüssel ist eindeutig.
| Methode | Beschreibung | Komplexität |
|---|---|---|
| operator[](key) | Wert hinzufügen / abrufen (erzeugt Schlüssel) | O(log n) |
| insert({key, value}) | Paar einfügen | O(log n) |
| find(key) | Such nach Schlüssel (gibt Iterator zurück) | O(log n) |
| erase(key) | Eintrag löschen | O(log n) |
| size() | Anzahl der Einträge | O(1) |
| begin() / end() | Iteratoren (sortiert nach Schlüssel) | O(1) |
find() statt operator[], wenn Sie nur prüfen möchten, ob ein Schlüssel existiert – operator[] erstellt einen neuen Eintrag, falls der Schlüssel fehlt.
set ist ein assoziativer Container, der eindeutige, sortierte Elemente speichert. Doppelte Einträge werden automatisch ignoriert.
| Methode | Beschreibung | Komplexität |
|---|---|---|
| insert(value) | Element einfügen (doppelte werden ignoriert) | O(log n) |
| find(value) | Element suchen | O(log n) |
| erase(value) | Element löschen | O(log n) |
| size() | Anzahl der Elemente | O(1) |
| contains(value) | Prüft, ob Element existiert (C++20) | O(log n) |
std::unordered_set für unsortierte, eindeutige Elemente mit O(1)-Zugriff (Hash-Tabelle). Die Reihenfolge ist dann nicht definiert.
Container Adapter bieten spezifische Schnittstellen für bestimmte Datenstrukturen – stack (LIFO), queue (FIFO) und priority_queue (priorisierte Warteschlange).
| Adapter | Beschreibung | Wichtige Methoden |
|---|---|---|
| stack | LIFO (Last-In-First-Out) | push, pop, top, empty, size |
| queue | FIFO (First-In-First-Out) | push, pop, front, back, empty, size |
| priority_queue | Warteschlange mit Priorität (größte zuerst) | push, pop, top, empty, size |
priority_queue verwendet standardmäßig std::vector als zugrunde liegenden Container. Sie können den Container und die Vergleichsfunktion anpassen.
vector
array
list
map
set
stack
std::vector v = {1, 2, 3}; ·
std::map m; m["key"] = 42; ·
std::set s = {1, 2, 3};