7 Container

In C++ bezeichnet der Begriff “Container” objektorientierte Datenstrukturen, die in der Standardbibliothek (STL) bereitgestellt werden, um Gruppen von Objekten zu speichern. Diese Container bieten verschiedene Methoden zur Speicherung, Organisation und Verwaltung von Daten. Sie sind generisch und können daher Daten jeglichen Typs speichern, sei es ein Basistyp wie int oder benutzerdefinierte Typen.

Es gibt verschiedene Arten von Containern in C++, und jeder hat seine eigenen Eigenschaften und Verwendungszwecke:

7.0.1 Sequenzielle Container

Diese Container speichern Elemente in einer geordneten Sequenz:

  1. std::vector: Ein dynamisches Array, das Elemente in einer kontinuierlichen Speicherbereich speichert. Es bietet schnellen Zugriff über einen Index, aber das Einfügen und Löschen von Elementen in der Mitte ist langsamer als bei anderen Containern.

  2. std::list: Eine doppelt verkettete Liste, die schnelle Einfügungen und Löschungen bietet, aber keinen direkten Indexzugriff wie std::vector.

  3. std::deque (Double Ended Queue): Ähnlich wie ein std::vector, aber optimiert für schnelles Einfügen und Löschen am Anfang und am Ende.

  4. std::forward_list: Eine einfach verkettete Liste.

  5. std::array: Ein Container, der eine feste Größe von Arrays bietet. Es bietet Funktionalität, die über rohe Arrays hinausgeht, behält aber die Vorteile von rohen Arrays bei.

7.0.2 Assoziative Container

Diese Container speichern Elemente in sortierter Form:

  1. std::set: Ein Container, der einzigartige Elemente in sortierter Reihenfolge speichert.

  2. std::multiset: Ähnlich wie std::set, aber es können mehrere gleiche Werte gespeichert werden.

  3. std::map: Ein assoziativer Array-Container, der Schlüssel-Wert-Paare in sortierter Reihenfolge nach Schlüssel speichert.

  4. std::multimap: Ähnlich wie std::map, aber es können mehrere Werte für denselben Schlüssel gespeichert werden.

7.0.3 Ungeordnete assoziative Container

Diese Container verwenden Hashing:

  1. std::unordered_set: Ein Set, das Werte in ungeordneter Reihenfolge speichert.

  2. std::unordered_multiset: Erlaubt mehrere gleiche Werte in ungeordneter Reihenfolge.

  3. std::unordered_map: Ein Hash-Table-basierter Schlüssel-Wert-Container.

  4. std::unordered_multimap: Erlaubt mehrere Werte für denselben Schlüssel.

7.0.4 Container Adapter

  1. std::stack: Ein LIFO (Last In First Out) Container-Adapter.

  2. std::queue: Ein FIFO (First In First Out) Container-Adapter.

  3. std::priority_queue: Ein Container-Adapter, der die Elemente immer in sortierter Reihenfolge speichert.

7.0.5 TLDR;

C++ bietet eine Vielzahl von Containern zur effizienten Speicherung und Verwaltung von Daten. Es ist wichtig, den richtigen Container für die spezifische Aufgabe auszuwählen, um die beste Leistung und den effizientesten Speicher zu erhalten. Die Wahl des richtigen Containers kann einen erheblichen Einfluss auf die Geschwindigkeit und den Speicherbedarf einer Anwendung haben.

7.1 Standard Template Library (STL)

Die Standard Template Library (STL) ist eine Sammlung von Template-Klassen und -Funktionen in C++, die gemeinsam verwendet werden, um häufig benötigte Datenstrukturen und Algorithmen zu implementieren. Sie wurde entwickelt, um Programmierern zu helfen, effiziente und leistungsstarke Programme zu erstellen, ohne jeden Algorithmus oder jede Datenstruktur von Grund auf neu erstellen zu müssen.

Die Hauptkomponenten der STL können in drei Hauptkategorien unterteilt werden:

7.1.1 1. Container

Container sind Datenstrukturen, die dazu dienen, andere Datenobjekte zu speichern. Die STL bietet verschiedene Typen von Containern:

7.1.2 2. Algorithmen

Die STL bietet eine umfangreiche Sammlung von Algorithmen, die auf Containern oder auf Bereichen von Containern operieren können. Diese Algorithmen sind in der Regel für alle Container-Typen verwendbar, mit einigen Ausnahmen. Einige der häufig verwendeten Algorithmen sind:

7.1.3 3. Iteratoren

Iteratoren sind Objekte, die den Zugriff auf die Elemente eines Containers ermöglichen und sich wie Zeiger verhalten. Sie bilden eine Brücke zwischen Containern und Algorithmen. Die meisten STL-Algorithmen erfordern Iteratoren als Argumente. Es gibt verschiedene Typen von Iteratoren, abhängig von den unterstützten Operationen:

7.1.4 Weitere Merkmale

Neben den oben genannten Hauptkomponenten bietet die STL auch:

7.1.5 Vorteile der STL

7.1.6 TLDR;

Die STL ist ein leistungsstarkes Werkzeug in der C++-Bibliothek, das die Entwicklung von Programmen erheblich beschleunigt. Durch die Verwendung von STL-Containern und -Algorithmen können Entwickler sich auf die Geschäftslogik ihrer Anwendungen konzentrieren und gleichzeitig von der Effizienz und der Robustheit der STL profitieren. Es ist für jeden C++-Programmierer von Vorteil, sich mit der STL vertraut zu machen und sie in seinen Projekten zu nutzen.