std::list
est un conteneur qui prend en charge l'insertion et la suppression d'éléments en temps constant depuis n'importe où dans le conteneur. L'accès aléatoire rapide n'est pas pris en charge. Il est généralement implémenté comme une liste doublement chaînée. Comparé à
std::forward_list
ce conteneur offre une capacité d'itération bidirectionnelle tout en étant moins efficace en termes d'utilisation de l'espace.
L'ajout, la suppression et le déplacement des éléments au sein de la liste ou entre plusieurs listes n'invalident pas les itérateurs ni les références. Un itérateur n'est invalidé que lorsque l'élément correspondant est supprimé.
Toutes les fonctions membres de
std::list
sont
constexpr
: il est possible de créer et d'utiliser des objets
std::list
dans l'évaluation d'une expression constante.
Cependant, les objets
std::list
ne peuvent généralement pas être
constexpr
, car toute mémoire allouée dynamiquement doit être libérée dans la même évaluation d'expression constante.
Les exigences imposées aux éléments dépendent des opérations effectivement réalisées sur le conteneur. Généralement, il est requis que le type d'élément soit un type complet et satisfasse aux exigences de
Erasable
, mais de nombreuses fonctions membres imposent des exigences plus strictes.
(depuis C++11)
(jusqu'à C++17)
Les exigences imposées aux éléments dépendent des opérations effectivement réalisées sur le conteneur. Généralement, il est requis que le type d'élément satisfasse aux exigences de
Erasable
, mais de nombreuses fonctions membres imposent des exigences plus strictes. Ce conteneur (mais pas ses membres) peut être instancié avec un type d'élément incomplet si l'allocateur satisfait aux
exigences de complétude de l'allocateur
.
Un allocateur utilisé pour acquérir/libérer la mémoire et pour construire/détruire les éléments dans cette mémoire. Le type doit satisfaire aux exigences de
Allocator
.
Le comportement est indéfini
(jusqu'à C++20)
Le programme est mal formé
(depuis C++20)
si
Allocator::value_type
n'est pas le même que
T
.
#include <algorithm>#include <iostream>#include <list>int main(){// Créer une liste contenant des entiers
std::list<int> l ={7, 5, 16, 8};// Ajouter un entier au début de la liste
l.push_front(25);// Ajouter un entier à la fin de la liste
l.push_back(13);// Insérer un entier avant 16 en effectuant une rechercheauto it =std::find(l.begin(), l.end(), 16);if(it != l.end())
l.insert(it, 42);// Afficher la listestd::cout<<"l = { ";for(int n : l)std::cout<< n <<", ";std::cout<<"};\n";}
Sortie :
l = { 25, 7, 5, 42, 16, 8, 13, };
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.