std::list
| Definiert in Header <list> |
||
| template< class T, |
(1) | |
| namespace pmr { template< class T > |
(2) | (seit C++17) |
std::list ist ein Container, der das Einfügen und Entfernen von Elementen von beliebiger Stelle im Container in konstanter Zeit unterstützt. Schneller zufälliger Zugriff wird nicht unterstützt. Er wird üblicherweise als doppelt verkettete Liste implementiert. Verglichen mit std::forward_list bietet dieser Container bidirektionale Iterationsfähigkeiten, ist aber weniger speichereffizient.
Das Hinzufügen, Entfernen und Verschieben von Elementen innerhalb der Liste oder über mehrere Listen hinweg macht die Iteratoren oder Referenzen nicht ungültig. Ein Iterator wird nur ungültig, wenn das entsprechende Element gelöscht wird.
std::list erfüllt die Anforderungen von Container, AllocatorAwareContainer, SequenceContainer und ReversibleContainer.
|
Alle Memberfunktionen von |
(seit C++26) |
Inhalt |
[edit] Template-Parameter
| T | - | Der Typ der Elemente.
| ||||||||||||||
| Allocator | - | Ein Allokator, der zum Erwerb/Freigeben von Speicher und zum Erstellen/Zerstören der Elemente in diesem Speicher verwendet wird. Der Typ muss die Anforderungen von Allocator erfüllen. Das Verhalten ist undefiniert(bis C++20)Das Programm ist ill-formed(seit C++20), wenn Allocator::value_type nicht mit T übereinstimmt. |
[edit] Member-Typen
| Mitgliedertyp | Definition | ||||
value_type
|
T | ||||
allocator_type
|
Allocator | ||||
size_type
|
Vorzeichenloser Ganzzahltyp (normalerweise std::size_t) | ||||
difference_type
|
Vorzeichenbehafteter Ganzzahltyp (normalerweise std::ptrdiff_t) | ||||
Referenz
|
value_type& | ||||
const_reference
|
const value_type& | ||||
Zeiger
|
| ||||
const_pointer
|
| ||||
iterator
|
LegacyBidirectionalIterator und ConstexprIterator(seit C++26) zu value_type | ||||
const_iterator
|
LegacyBidirectionalIterator und ConstexprIterator(seit C++26) zu const value_type | ||||
reverse_iterator
|
std::reverse_iterator<iterator> | ||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
[edit] Member-Funktionen
konstruiert die list(public member function) | |
zerstört die list(public member function) | |
| weist dem Container Werte zu (public member function) | |
| weist dem Container Werte zu (public member function) | |
| (C++23) |
weist dem Container einen Bereich von Werten zu (public member function) |
| gibt den zugehörigen Allocator zurück (public member function) | |
Elementzugriff | |
| Greift auf das erste Element zu (public member function) | |
| Greift auf das letzte Element zu (public member function) | |
Iteratoren | |
| (C++11) |
gibt einen Iterator zum Anfang zurück (public member function) |
| (C++11) |
gibt einen Iterator zum Ende zurück (public member function) |
| (C++11) |
gibt einen Reverse-Iterator zum Anfang zurück (public member function) |
| (C++11) |
gibt einen Reverse-Iterator zum Ende zurück (public member function) |
Kapazität | |
| prüft, ob der Container leer ist (public member function) | |
| Gibt die Anzahl der Elemente zurück (public member function) | |
| Gibt die maximal mögliche Anzahl von Elementen zurück (public member function) | |
Modifizierer | |
| leert den Inhalt (public member function) | |
| fügt Elemente ein (public member function) | |
| (C++23) |
fügt einen Bereich von Elementen ein (public member function) |
| (C++11) |
konstruiert Elemente direkt (in-place) (public member function) |
| entfernt Elemente (public member function) | |
| fügt ein Element am Ende hinzu (public member function) | |
| (C++11) |
konstruiert ein Element direkt (in-place) am Ende (public member function) |
| (C++23) |
fügt einen Bereich von Elementen am Ende hinzu (public member function) |
| entfernt das letzte Element (public member function) | |
| fügt ein Element am Anfang ein (public member function) | |
| (C++11) |
konstruiert ein Element im-place am Anfang (public member function) |
| (C++23) |
fügt einen Elementbereich am Anfang hinzu (public member function) |
| entfernt das erste Element (public member function) | |
| ändert die Anzahl der gespeicherten Elemente (public member function) | |
| tauscht die Inhalte (public member function) | |
Operationen | |
| fügt zwei sortierte Listen zusammen (public member function) | |
verschiebt Elemente aus einer anderen list(public member function) | |
| entfernt Elemente, die bestimmte Kriterien erfüllen (public member function) | |
| kehrt die Reihenfolge der Elemente um (public member function) | |
| entfernt aufeinanderfolgende doppelte Elemente (public member function) | |
| sortiert die Elemente (public member function) | |
[edit] Nicht-Member-Funktionen
| (entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(C++20) |
vergleicht die Werte von zwei lists lexikographisch(function template) |
| spezialisiert den Algorithmus std::swap (function template) | |
| entfernt alle Elemente, die bestimmte Kriterien erfüllen (function template) |
Deduction Guides |
(seit C++17) |
[edit] Anmerkungen
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Bereichskonstruktion und -einfügung für Container |
__cpp_lib_constexpr_containers |
202502L |
(C++26) | constexpr std::list |
[edit] Beispiel
#include <algorithm> #include <iostream> #include <list> int main() { // Create a list containing integers std::list<int> l = {7, 5, 16, 8}; // Add an integer to the front of the list l.push_front(25); // Add an integer to the back of the list l.push_back(13); // Insert an integer before 16 by searching auto it = std::find(l.begin(), l.end(), 16); if (it != l.end()) l.insert(it, 42); // Print out the list std::cout << "l = { "; for (int n : l) std::cout << n << ", "; std::cout << "};\n"; }
Ausgabe
l = { 25, 7, 5, 42, 16, 8, 13, };[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 230 | C++98 | T musste nicht CopyConstructible sein(ein Element vom Typ T konnte möglicherweise nicht konstruiert werden) |
T muss auchCopyConstructible sein |
| LWG 276 | C++98 | T war immer erforderlich, um CopyAssignable zu sein |
nur erforderlich, wenn operator= oder assign mit T instanziiert wird |
[edit] Siehe auch
| (C++11) |
Einfach verkettete Liste (Klassenvorlage) |