Namespaces
Variants

std:: list

From cppreference.net
Definiert im Header <list>
template <

class T,
class Allocator = std:: allocator < T >

> class list ;
(1)
namespace pmr {

template < class T >
using list = std :: list < T, std:: pmr :: polymorphic_allocator < T >> ;

}
(2) (seit C++17)

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.

std::list erfüllt die Anforderungen von Container , AllocatorAwareContainer , SequenceContainer und ReversibleContainer .

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.

(seit C++26)

Inhaltsverzeichnis

Template-Parameter

T - Der Typ der Elemente.
T muss die Anforderungen von CopyConstructible erfüllen. T muss die Anforderungen von CopyAssignable erfüllen, falls list::operator= oder list::assign mit T instanziiert wird. (bis C++11)
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.

Feature-Test Makro Wert Std Feature
__cpp_lib_incomplete_container_elements 201505L (C++17) Minimale Unterstützung für unvollständige Typen
(seit C++17)

Allocator - 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.

Mitgliedertypen

Mitgliedstyp Definition
value_type T
allocator_type Allocator
size_type Vorzeichenloser Ganzzahltyp (üblicherweise std::size_t )
difference_type Vorzeichenbehafteter Ganzzahltyp (üblicherweise std::ptrdiff_t )
reference value_type &
const_reference const value_type &
pointer

Allocator::pointer

(bis C++11)

std:: allocator_traits < Allocator > :: pointer

(seit C++11)
const_pointer

Allocator::const_pointer

(bis C++11)

std:: allocator_traits < Allocator > :: const_pointer

(seit C++11)
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 >

Memberfunktionen

konstruiert die list
(öffentliche Elementfunktion)
zerstört die list
(öffentliche Elementfunktion)
weist dem Container Werte zu
(öffentliche Elementfunktion)
weist Werte dem Container zu
(öffentliche Elementfunktion)
weist dem Container einen Wertebereich zu
(öffentliche Elementfunktion)
gibt den zugeordneten Allokator zurück
(öffentliche Elementfunktion)
Elementzugriff
Zugriff auf das erste Element
(öffentliche Elementfunktion)
Zugriff auf das letzte Element
(öffentliche Elementfunktion)
Iteratoren
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion)
(C++11)
gibt einen Iterator zum Ende zurück
(öffentliche Member-Funktion)
gibt einen Reverse-Iterator zum Anfang zurück
(public member function)
(C++11)
gibt einen umgekehrten Iterator zum Ende zurück
(öffentliche Elementfunktion)
Kapazität
prüft, ob der Container leer ist
(öffentliche Elementfunktion)
gibt die Anzahl der Elemente zurück
(öffentliche Elementfunktion)
gibt die maximal mögliche Anzahl von Elementen zurück
(öffentliche Elementfunktion)
Modifikatoren
löscht den Inhalt
(öffentliche Elementfunktion)
fügt Elemente ein
(öffentliche Elementfunktion)
fügt eine Reihe von Elementen ein
(öffentliche Elementfunktion)
(C++11)
Konstruiert Element direkt vor Ort
(öffentliche Elementfunktion)
löscht Elemente
(öffentliche Elementfunktion)
fügt ein Element am Ende hinzu
(öffentliche Elementfunktion)
Konstruiert ein Element direkt am Ende
(öffentliche Elementfunktion)
fügt eine Reihe von Elementen am Ende hinzu
(öffentliche Elementfunktion)
entfernt das letzte Element
(öffentliche Elementfunktion)
fügt ein Element am Anfang ein
(öffentliche Elementfunktion)
Konstruiert ein Element direkt am Anfang
(öffentliche Elementfunktion)
fügt einen Bereich von Elementen am Anfang hinzu
(öffentliche Elementfunktion)
entfernt das erste Element
(öffentliche Elementfunktion)
ändert die Anzahl der gespeicherten Elemente
(public member function)
tauscht die Inhalte aus
(öffentliche Elementfunktion)
Operationen
vereinigt zwei sortierte Listen
(öffentliche Elementfunktion)
überträgt Elemente aus einer anderen list
(öffentliche Elementfunktion)
entfernt Elemente, die bestimmte Kriterien erfüllen
(öffentliche Elementfunktion)
kehrt die Reihenfolge der Elemente um
(öffentliche Elementfunktion)
entfernt aufeinanderfolgende doppelte Elemente
(öffentliche Elementfunktion)
sortiert die Elemente
(öffentliche Elementfunktion)

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 lexikographisch die Werte zweier list s
(Funktions-Template)
spezialisiert den std::swap Algorithmus
(Funktions-Template)
löscht alle Elemente, die bestimmte Kriterien erfüllen
(Funktions-Template)

Deduktionsleitfäden

(seit C++17)

Hinweise

Feature-Test Makro Wert Std Funktion
__cpp_lib_containers_ranges 202202L (C++23) Ranges-Konstruktion und -Einfügung für Container
__cpp_lib_constexpr_list 202502L (C++26) constexpr std::list

Beispiel

#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 ein
    auto it = std::find(l.begin(), l.end(), 16);
    if (it != l.end())
        l.insert(it, 42);
    // Gib die Liste aus
    std::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.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 230 C++98 T war nicht erforderlich CopyConstructible zu sein
(ein Element vom Typ T könnte möglicherweise nicht konstruiert werden)
T muss ebenfalls
CopyConstructible sein
LWG 276 C++98 T war immer erforderlich CopyAssignable zu sein nur erforderlich falls operator= oder
assign mit T instanziiert wird

Siehe auch

einfach verkettete Liste
(Klassentemplate)