Namensräume
Varianten
Aktionen

std::list

Von cppreference.com
< cpp‎ | container
 
 
 
 
Definiert in 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 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 std::list sind constexpr: es ist möglich, std::list Objekte während der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.

Allerdings können std::list Objekte im Allgemeinen nicht constexpr sein, da jeder dynamisch zugewiesene Speicher im selben konstanten Ausdruck freigegeben werden muss.

(seit C++26)

Inhalt

[edit] Template-Parameter

T - Der Typ der Elemente.
T muss die Anforderungen von CopyConstructible erfüllen. T muss die Anforderungen von CopyAssignable erfüllen, wenn list::operator= oder list::assign mit T instanziiert wird. (bis C++11)
Die auf die Elemente angewendeten Anforderungen hängen von den tatsächlichen Operationen ab, die auf dem Container ausgeführt werden. Im Allgemeinen muss der Elementtyp ein vollständiger Typ sein und die Anforderungen von Erasable erfüllen, aber viele Memberfunktionen stellen strengere Anforderungen. (seit C++11)
(bis C++17)

Die auf die Elemente angewendeten Anforderungen hängen von den tatsächlichen Operationen ab, die auf dem Container ausgeführt werden. Im Allgemeinen muss der Elementtyp die Anforderungen von Erasable erfüllen, aber viele Memberfunktionen stellen strengere Anforderungen. Dieser Container (aber nicht seine Member) kann mit einem unvollständigen Elementtyp instanziiert werden, wenn der Allokator die Komplettheitsanforderungen des Allokators 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)

[Bearbeiten]

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]

[edit] Member-Typen

Mitgliedertyp Definition
value_type T[edit]
allocator_type Allocator[edit]
size_type Vorzeichenloser Ganzzahltyp (normalerweise std::size_t)[edit]
difference_type Vorzeichenbehafteter Ganzzahltyp (normalerweise std::ptrdiff_t)[edit]
Referenz value_type&[edit]
const_reference const value_type&[edit]
Zeiger

Allocator::pointer

(bis C++11)

std::allocator_traits<Allocator>::pointer

(seit C++11)
[Bearbeiten]
const_pointer

Allocator::const_pointer

(bis C++11)

std::allocator_traits<Allocator>::const_pointer

(seit C++11)
[Bearbeiten]
iterator LegacyBidirectionalIterator und ConstexprIterator(seit C++26) zu value_type[edit]
const_iterator LegacyBidirectionalIterator und ConstexprIterator(seit C++26) zu const value_type[edit]
reverse_iterator std::reverse_iterator<iterator>[edit]
const_reverse_iterator std::reverse_iterator<const_iterator>[edit]

[edit] Member-Funktionen

konstruiert die list
(public member function) [edit]
zerstört die list
(public member function) [edit]
weist dem Container Werte zu
(public member function) [edit]
weist dem Container Werte zu
(public member function) [edit]
weist dem Container einen Bereich von Werten zu
(public member function) [edit]
gibt den zugehörigen Allocator zurück
(public member function) [edit]
Elementzugriff
Greift auf das erste Element zu
(public member function) [edit]
Greift auf das letzte Element zu
(public member function) [edit]
Iteratoren
gibt einen Iterator zum Anfang zurück
(public member function) [edit]
(C++11)
gibt einen Iterator zum Ende zurück
(public member function) [edit]
gibt einen Reverse-Iterator zum Anfang zurück
(public member function) [edit]
(C++11)
gibt einen Reverse-Iterator zum Ende zurück
(public member function) [edit]
Kapazität
prüft, ob der Container leer ist
(public member function) [edit]
Gibt die Anzahl der Elemente zurück
(public member function) [edit]
Gibt die maximal mögliche Anzahl von Elementen zurück
(public member function) [edit]
Modifizierer
leert den Inhalt
(public member function) [edit]
fügt Elemente ein
(public member function) [edit]
fügt einen Bereich von Elementen ein
(public member function) [edit]
(C++11)
konstruiert Elemente direkt (in-place)
(public member function) [edit]
entfernt Elemente
(public member function) [edit]
fügt ein Element am Ende hinzu
(public member function) [edit]
konstruiert ein Element direkt (in-place) am Ende
(public member function) [edit]
fügt einen Bereich von Elementen am Ende hinzu
(public member function) [edit]
entfernt das letzte Element
(public member function) [edit]
fügt ein Element am Anfang ein
(public member function) [edit]
konstruiert ein Element im-place am Anfang
(public member function) [edit]
fügt einen Elementbereich am Anfang hinzu
(public member function) [edit]
entfernt das erste Element
(public member function) [edit]
ändert die Anzahl der gespeicherten Elemente
(public member function) [edit]
tauscht die Inhalte
(public member function) [edit]
Operationen
fügt zwei sortierte Listen zusammen
(public member function) [edit]
verschiebt Elemente aus einer anderen list
(public member function) [edit]
entfernt Elemente, die bestimmte Kriterien erfüllen
(public member function) [edit]
kehrt die Reihenfolge der Elemente um
(public member function) [edit]
entfernt aufeinanderfolgende doppelte Elemente
(public member function) [edit]
sortiert die Elemente
(public member function) [edit]

[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) [edit]
spezialisiert den Algorithmus std::swap
(function template) [edit]
entfernt alle Elemente, die bestimmte Kriterien erfüllen
(function template) [edit]

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 auch
CopyConstructible 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

Einfach verkettete Liste
(Klassenvorlage) [edit]