std:: list
|
Definido en el encabezado
<list>
|
||
|
template
<
class
T,
|
(1) | |
|
namespace
pmr
{
template
<
class
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
|
(since C++26) |
Contenidos |
Parámetros de plantilla
| T | - |
El tipo de los elementos.
|
||||||||||||||
| 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
|
|
||||
const_pointer
|
|
||||
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) |
|
|
(C++23)
|
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 |
|
|
(C++11)
|
devuelve un iterador al inicio
(función miembro pública) |
|
(C++11)
|
devuelve un iterador al final
(función miembro pública) |
|
(C++11)
|
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) |
|
|
(C++23)
|
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) |
|
|
(C++11)
|
construye un elemento en el lugar al final
(función miembro pública) |
|
(C++23)
|
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) |
|
|
(C++11)
|
construye un elemento in situ al principio
(función miembro pública) |
|
(C++23)
|
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
|
(C++11)
|
lista simplemente enlazada
(plantilla de clase) |