std::list
ist ein Container, der Einfügen und Entfernen von Elementen an beliebiger Stelle im Container in konstanter Zeit unterstützt. Schneller wahlfreier Zugriff wird nicht unterstützt. Es ist üblicherweise als doppelt verkettete Liste implementiert. Im Vergleich zu
std::forward_list
bietet dieser Container bidirektionale Iterationsfähigkeit, ist jedoch weniger speichereffizient.
Das Hinzufügen, Entfernen und Verschieben von Elementen innerhalb der Liste oder über mehrere Listen hinweg macht Iteratoren oder Referenzen nicht ungültig. Ein Iterator wird nur ungültig, wenn das entsprechende Element gelöscht wird.
Alle Memberfunktionen von
std::list
sind
constexpr
: Es ist möglich,
std::list
-Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.
Allerdings können
std::list
-Objekte im Allgemeinen nicht
constexpr
sein, da jeder dynamisch allokierte Speicher in derselben Auswertung des konstanten Ausdrucks freigegeben werden muss.
Die Anforderungen an die Elemente hängen von den tatsächlich durchgeführten Operationen auf dem Container ab. Allgemein wird gefordert, dass der Elementtyp ein vollständiger Typ ist und die Anforderungen von
Erasable
erfüllt, jedoch stellen viele Memberfunktionen strengere Anforderungen.
(seit C++11)
(bis C++17)
Die Anforderungen an die Elemente hängen von den tatsächlich durchgeführten Operationen auf dem Container ab. Allgemein wird gefordert, dass der Elementtyp die Anforderungen von
Erasable
erfüllt, jedoch stellen viele Memberfunktionen strengere Anforderungen. Dieser Container (aber nicht seine Member) kann mit einem unvollständigen Elementtyp instanziiert werden, falls der Allokator die
Allokator-Vollständigkeitsanforderungen
erfüllt.
Ein Allokator, der zur Beschaffung/Freigabe von Speicher und zur Konstruktion/Destruktion 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 fehlerhaft
(seit C++20)
, falls
Allocator::value_type
nicht identisch mit
T
ist.
#include <algorithm>#include <iostream>#include <list>int main(){// Erstelle eine Liste mit Ganzzahlen
std::list<int> l ={7, 5, 16, 8};// Füge eine Ganzzahl am Anfang der Liste hinzu
l.push_front(25);// Füge eine Ganzzahl am Ende der Liste hinzu
l.push_back(13);// Füge eine Ganzzahl vor 16 durch Suche einauto it =std::find(l.begin(), l.end(), 16);if(it != l.end())
l.insert(it, 42);// Gib die Liste ausstd::cout<<"l = { ";for(int n : l)std::cout<< n <<", ";std::cout<<"};\n";}
Ausgabe:
l = { 25, 7, 5, 42, 16, 8, 13, };
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.