STL Containers

Die ISO-Standardvorlagenbibliothek (STL) stellt Container zum Speichern verknüpfter Objekte bereit. Die Container sind Vorlagenklassen, mit denen die Spezifikationen der in den Containern zugelassenen Objekte ermöglicht wird.

Hinweis

Dieser Artikel bezieht sich nicht auf STL/CLR.Weitere Informationen finden Sie unter Referenz zur STL/CLR-Bibliothek.

Container in der STL können in drei Kategorien unterteilt werden: Sequenzcontainer, assoziative Container und Containeradapter.

Sequenzcontainer

Sequenzcontainer wahren die Reihenfolge der von Ihnen angegebenen eingefügten Elemente.

Ein vector-Container verhält sich wie ein Array, kann jedoch nach Bedarf automatisch erweitert werden. Er wird mit direktem Zugriff bzw. zusammenhängend gespeichert, und ist in der Länge hochgradig flexibel. Aus diesen und weiteren Gründen ist vector der bevorzugte Sequenzcontainer für die meisten Anwendungen. Weitere Informationen finden Sie unter vector-Klasse.

Ein array-Container weist einige der Vorteile von vector auf, aber er ist in der Länge nicht so flexibel. Weitere Informationen finden Sie unter array-Klasse (STL).

Ein deque-Container (doppelseitige Warteschlange) ermöglichen schnelles Einfügen und Löschen am Anfang und Ende des Containers. Er bietet die Vorteile von direktem Zugriff und flexibler Länge von vector, ist aber nicht zusammenhängend. Weitere Informationen finden Sie unter deque-Klasse.

Ein list-Container ist eine doppelt verknüpfte Liste, die bidirektionalen Zugriff, schnelles Einfügen und Löschen im gesamten Container ermöglicht, aber direkter Zugriff auf ein Element im Container ist nicht möglich. Weitere Informationen finden Sie unter list-Klasse.

Ein forward_list-Container ist eine einfach verknüpfte Liste. Er ist die Version mit Vorwärtszugriff von list. Weitere Informationen finden Sie unter forward_list-Klasse.

Assoziative Container

In assoziativen Containern werden Elemente in einer vordefinierten Reihenfolge eingefügt, z. B. sortiert aufsteigend. Unsortierte assoziative Container sind ebenfalls verfügbar. Assoziative Container können in zwei Teilbereiche gruppiert werden: Zuordnungen und Sätze.

map (manchmal auch als ein Wörterbuch bezeichnet) besteht aus einem Schlüssel-Wert-Paar. Der Schlüssel wird zum Sortieren der Reihenfolge verwendet, und der Wert wird dem Schlüssel zugeordnet. Z. B. kann map eindeutige Schlüssel enthalten, die jedes einzelne Wort in einem Text und die entsprechenden Werte darstellen, die die Häufigkeit darstellen, mit der jedes Wort im Text angezeigt wird. Die unsortierte Version von map ist unordered_map. Weitere Informationen finden Sie unter map-Klasse und unordered_map-Klasse.

Ein set-Element ist lediglich ein aufsteigender Container eindeutiger Elemente. Der Wert ist auch gleichzeitig der Schlüssel. Die unsortierte Version von set ist unordered_set. Weitere Informationen finden Sie unter set-Klasse und unordered_set-Klasse.

Sowohl map als auch set ermöglichen das Einfügen nur einer Instanz eines Schlüssels oder Elements in den Container. Wenn mehrere Instanzen der Elemente erforderlich sind, verwenden Sie multimap oder multiset. Die unsortierten Versionen sind unordered_multimap und unordered_multiset. Weitere Informationen finden Sie unter multimap-Klasse, unordered_multimap-Klasse, multiset-Klasse und unordered_multiset-Klasse.

Bei sortierten Zuordnungen und Sätzen werden bidirektionale Iteratoren unterstützt, und bei den unsortierten Entsprechungen werden Vorwärtsiteratoren unterstützt. Weitere Informationen finden Sie unter Iteratoren.

Containeradapter

Ein Containeradapter ist die Variante einer Sequenz oder eines assoziativen Containers, die die Schnittstelle zwecks Einfachheit und Verständlichkeit einschränkt. Bei Containeradaptern werden keine Iteratoren unterstützt.

Ein queue-Container folgt der FIFO-Semantik (first in, first out). Das erste abgelegte Element –, d. h. das in Warteschlange eingefügte – ist das Erste, das entnommen wird – d. .h. aus der Warteschlange entfernt wird. Weitere Informationen finden Sie unter queue-Klasse.

Ein priority_queue-Container wird so organisiert, dass das Element, das über den höchsten Wert verfügt, immer zuerst in der Warteschlange steht. Weitere Informationen finden Sie unter priority_queue-Klasse.

Ein stack-Container folgt der LIFO-Semantik (last in, first out). Das letzte Element, das auf dem Stapel abgelegt wird, ist das erste entnommene Element. Weitere Informationen finden Sie unter stack-Klasse.

Da Containeradapter keine Iteratoren unterstützen, können sie nicht mit STL-Algorithmen verwendet werden. Weitere Informationen finden Sie unter Algorithmen.

Anforderungen für Containerelemente

Im Allgemeinen können Elemente, die in einen STL-Container eingefügt werden, fast jeden Objekttyp haben, wenn sie kopiert werden können. Nur verschiebbare Elemente – z. B. vector<unique_ptr<T>>, die mithilfe von unique_ptr<> erstellt werden, funktionieren, solange keine Memberfunktionen aufgerufen werden, die versuchen, sie zu kopieren.

Vom Destruktor darf keine Ausnahme ausgelöst werden.

Sortierte assoziative Container (früher im Artikel beschrieben) müssen einen öffentlich definierten Vergleichsoperator aufweisen. (Standardmäßig ist operator< der Operator, allerdings werden auch Typen, die nicht mit operator< arbeiten, unterstützt.

Einige Vorgänge in Containern könnten auch einen öffentlichen Standardkonstruktor und einen öffentlichen Äquivalenzoperator erfordern. Beispielsweise benötigen die unsortierten assoziativen Container eine Unterstützung für Gleichheit und Hashverfahren.

Zugreifen auf Containerelemente

Auf Containerelemente wird mithilfe von Iteratoren zugegriffen. Weitere Informationen finden Sie unter Iteratoren.

Hinweis

Sie können auch range-based for-Schleifen verwenden, um STL-Auflistungen zu durchlaufen.

Siehe auch

Referenz

Standardvorlagenbibliothek

<sample container>

Threadsicherheit in der C++-Standardbibliothek

Konzepte

Container (Modern C++)