Namespaces
Variants

std:: list

From cppreference.net
Definido en el encabezado <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) (desde C++17)

std::list es un contenedor que permite la inserción y eliminación de elementos en tiempo constante desde cualquier posición del contenedor. No admite acceso aleatorio rápido. Normalmente se implementa como una lista doblemente enlazada. En comparación con std::forward_list este contenedor proporciona capacidad de iteración bidireccional aunque es menos eficiente en cuanto al uso de espacio.

Agregar, eliminar y mover elementos dentro de la lista o a través de varias listas no invalida los iteradores o referencias. Un iterador se invalida solo cuando se elimina el elemento correspondiente.

std::list cumple con los requisitos de Container , AllocatorAwareContainer , SequenceContainer y ReversibleContainer .

Todas las funciones miembro de std::list son constexpr : es posible crear y utilizar objetos std::list en la evaluación de una expresión constante.

Sin embargo, los objetos std::list generalmente no pueden ser constexpr , porque cualquier almacenamiento asignado dinámicamente debe liberarse en la misma evaluación de la expresión constante.

(since C++26)

Contenidos

Parámetros de plantilla

T - El tipo de los elementos.
T debe cumplir con los requisitos de CopyConstructible . T debe cumplir con los requisitos de CopyAssignable si list::operator= o list::assign se instancian con T . (hasta C++11)
Los requisitos que se imponen sobre los elementos dependen de las operaciones reales realizadas en el contenedor. Generalmente, se requiere que el tipo de elemento sea un tipo completo y cumpla con los requisitos de Erasable , pero muchas funciones miembro imponen requisitos más estrictos. (desde C++11)
(hasta C++17)

Los requisitos que se imponen sobre los elementos dependen de las operaciones reales realizadas en el contenedor. Generalmente, se requiere que el tipo de elemento cumpla con los requisitos de Erasable , pero muchas funciones miembro imponen requisitos más estrictos. Este contenedor (pero no sus miembros) puede instanciarse con un tipo de elemento incompleto si el asignador satisface los requisitos de completitud del asignador .

Macro de prueba de características Valor Est Característica
__cpp_lib_incomplete_container_elements 201505L (C++17) Soporte mínimo para tipos incompletos
(desde C++17)

Asignador - Un asignador que se utiliza para adquirir/liberar memoria y para construir/destruir los elementos en esa memoria. El tipo debe cumplir con los requisitos de Allocator . El comportamiento es indefinido (hasta C++20) El programa está mal formado (desde C++20) si Allocator::value_type no es el mismo que T .

Tipos de miembros

Tipo de miembro Definición
value_type T
allocator_type Allocator
size_type Tipo entero sin signo (normalmente std::size_t )
difference_type Tipo entero con signo (normalmente std::ptrdiff_t )
reference value_type &
const_reference const value_type &
pointer

Allocator::pointer

(hasta C++11)

std:: allocator_traits < Allocator > :: pointer

(desde C++11)
const_pointer

Allocator::const_pointer

(hasta C++11)

std:: allocator_traits < Allocator > :: const_pointer

(desde C++11)
iterator LegacyBidirectionalIterator y ConstexprIterator (desde C++26) a value_type
const_iterator LegacyBidirectionalIterator y ConstexprIterator (desde C++26) a const value_type
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

Funciones miembro

construye la list
(función miembro pública)
destruye el list
(función miembro pública)
asigna valores al contenedor
(función miembro pública)
asigna valores al contenedor
(función miembro pública)
asigna un rango de valores al contenedor
(función miembro pública)
devuelve el asignador asociado
(función miembro pública)
Acceso a elementos
acceder al primer elemento
(función miembro pública)
acceder al último elemento
(función miembro pública)
Iteradores
devuelve un iterador al inicio
(función miembro pública)
(C++11)
devuelve un iterador al final
(función miembro pública)
devuelve un iterador inverso al principio
(función miembro pública)
(C++11)
devuelve un iterador inverso al final
(función miembro pública)
Capacidad
comprueba si el contenedor está vacío
(función miembro pública)
devuelve el número de elementos
(función miembro pública)
devuelve el número máximo posible de elementos
(función miembro pública)
Modificadores
borra el contenido
(función miembro pública)
inserta elementos
(función miembro pública)
inserta un rango de elementos
(función miembro pública)
(C++11)
construye el elemento in situ
(función miembro pública)
elimina elementos
(función miembro pública)
agrega un elemento al final
(función miembro pública)
construye un elemento en el lugar al final
(función miembro pública)
agrega un rango de elementos al final
(función miembro pública)
elimina el último elemento
(función miembro pública)
inserta un elemento al principio
(función miembro pública)
construye un elemento in situ al principio
(función miembro pública)
agrega un rango de elementos al principio
(función miembro pública)
elimina el primer elemento
(función miembro pública)
cambia el número de elementos almacenados
(función miembro pública)
intercambia los contenidos
(función miembro pública)
Operaciones
fusiona dos listas ordenadas
(función miembro pública)
transfiere elementos desde otra list
(función miembro pública)
elimina elementos que cumplen criterios específicos
(función miembro pública)
invierte el orden de los elementos
(función miembro pública)
elimina elementos duplicados consecutivos
(función miembro pública)
ordena los elementos
(función miembro pública)

Funciones no miembro

(eliminado en C++20) (eliminado en C++20) (eliminado en C++20) (eliminado en C++20) (eliminado en C++20) (C++20)
compara lexicográficamente los valores de dos list s
(plantilla de función)
especializa el algoritmo std::swap
(plantilla de función)
elimina todos los elementos que cumplen criterios específicos
(plantilla de función)

Guías de deducción

(desde C++17)

Notas

Macro de prueba de características Valor Estándar Característica
__cpp_lib_containers_ranges 202202L (C++23) Construcción e inserción de rangos para contenedores
__cpp_lib_constexpr_list 202502L (C++26) constexpr std::list

Ejemplo

#include <algorithm>
#include <iostream>
#include <list>
int main()
{
    // Crear una lista que contenga enteros
    std::list<int> l = {7, 5, 16, 8};
    // Agregar un entero al frente de la lista
    l.push_front(25);
    // Agregar un entero al final de la lista
    l.push_back(13);
    // Insertar un entero antes del 16 mediante búsqueda
    auto it = std::find(l.begin(), l.end(), 16);
    if (it != l.end())
        l.insert(it, 42);
    // Imprimir la lista
    std::cout << "l = { ";
    for (int n : l)
        std::cout << n << ", ";
    std::cout << "};\n";
}

Salida:

l = { 25, 7, 5, 42, 16, 8, 13, };

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 230 C++98 T no se requería que fuera CopyConstructible
(un elemento de tipo T podría no poder construirse)
T también se requiere que
sea CopyConstructible
LWG 276 C++98 T siempre se requería que fuera CopyAssignable solo se requiere si operator= o
assign se instancia con T

Véase también

lista simplemente enlazada
(plantilla de clase)