Espacios de nombres
Variantes
Acciones

std::deque

De cppreference.com
< cpp‎ | container
 
 
 
 
Definido en el archivo de encabezado <deque>
template<

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

>class deque;
(1)
namespace pmr {

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

}
(2) (desde C++17)

std::deque (cola doblemente terminada) es un contenedor de secuencia indexada que permite una rápida inserción y eliminación tanto al principio como al final. Además, la inserción y eliminación en cualquier extremo de una cola doblemente terminada nunca invalida los punteros o referencias al resto de los elementos.

A diferencia de std::vector, los elementos de una cola doblemente terminada no se almacenan contiguamente: las implementaciones típicas usan una secuencia de arrays de tamaño fijo asignados individualmente, con contabilidad adicional, lo que significa que el acceso indexado a una cola doblemente terminada debe realizar dos desreferencias de puntero, en comparación con el acceso indexado del vector, que realiza solo una.

El almacenamiento de un deque se expande y contrae automáticamente según sea necesario. La expansión de una deque es más barata que la expansión de un std::vector porque no implica copiar los elementos existentes a una nueva ubicación de memoria. Por otro lado, las colas doblemente terminadas suelen tener un gran coste de memoria mínimo; una cola doblemente terminada que contiene solo un elemento tiene que asignar su array interno complet (por ejemplo, 8 veces el tamaño del objeto en libstdc++ de 64 bits; 16 veces el tamaño del objeto o 4096 bytes, lo que sea mayor, en libc++ de 64 bits).

La complejidad (eficiencia) de las operaciones comunes sobre colas doblemente terminadas es la siguiente:

  • Acceso aleatorio - constante O(1).
  • Inserción o eliminación de elementos al final o al comienzo - constante O(1).
  • Inserción o eliminación de elementos - lineal O(n).

std::deque cumple con los requerimientos de Contenedor, ContenedorConscienteDeAsignador, ContenedorDeSecuencia y ContenedorReversible.

Contenido

[editar]Parámetros de plantilla

T - El tipo de los elementos.
T debe cumplir con los requisitos de AsignablePorCopia y ConstruiblePorCopia. (hasta C++11)
Los requisitos que se imponen a los elementos dependen de las operaciones actuales realizadas en el contenedor. Generalmente, se requiere que el tipo de elemento sea un tipo completo y cumpla con los requisitos de Borrable, pero muchas funciones miembro imponen requisitos más estrictos. (desde C++11)

[editar]

Allocator - Un asignador que se usa para adquirir y liberar memoria, y para construir y destruir los elementos en esa memoria. El tipo debe cumplir con los requisitos de Asignador. El comportamiento no está definido si Allocator::value_type no es el mismo que T. [editar]

[editar]Invalidación de iteradores

Todavía hay algunas inexactitudes en esta sección, consulta las páginas de funciones miembro individuales para obtener más detalles.

Operaciones Invalidado
Todas las operaciones de solo lectura Nunca
swap, std::swap El iterador después del final puede invalidarse (definido por la implementación)
shrink_to_fit, clear, insert, emplace, push_front,
push_back, emplace_front, emplace_back
Siempre
erase Si se borra al principio - solo los elementos borrados

Si se borra al final - solo los elementos borrados y el iterador después del final
De lo contrario - todos los iteradores se invalidan (incluyendo el iterador después del final).

resize Si el nuevo tamaño es más pequeño que el anterior: solo los elementos borrados y el
iterador después del final

Si el nuevo tamaño es más grande que el anterior: todos los iteradores se invalidan
De lo contrario - ninguno de los iteradores se invalida.

pop_front Solo para el elemento borrado
pop_back Solo para el elemento borrado y el iterador después del final.

[editar]Notas de invalidación

  • Al insertar en cualquier extremidad de la cola doblemente terminada, las referencias no se invalidan por insert y emplace.
  • push_front, push_back, emplace_front y emplace_back no invalidan ninguna referencia a los elementos de la cola doblemente terminada.
  • Al borrar en cualquier extremidad de la cola doblemente terminada, las referencias a los elementos no borrados no se invalidan por erase, pop_front y pop_back.
  • Una llamada a resize con un tamaño más pequeño no invalida ninguna referencia a los elementos no borrados.
  • Una llamada a resize con un tamaño más grande no invalida ninguna referencia a los elementos de la cola doblemente terminada.

[editar]Tipos miembro

Tipo miembro Definición
value_typeT[editar]
allocator_typeAllocator[editar]
size_type Tipo entero sin signo (por lo general std::size_t) [editar]
difference_type Tipo entero con signo (por lo general std::ptrdiff_t) [editar]
referenceAllocator::reference(hasta C++11)
value_type&(desde C++11)[editar]
const_referenceAllocator::const_reference(hasta C++11)
const value_type&(desde C++11)[editar]
pointerAllocator::pointer(hasta C++11)
std::allocator_traits<Allocator>::pointer(desde C++11)[editar]
const_pointerAllocator::const_pointer(hasta C++11)
std::allocator_traits<Allocator>::const_pointer(desde C++11)[editar]
iteratorIteradorDeAccesoAleatorioLegado[editar]
const_iteratorIteradorDeAccesoAleatorioLegado constante [editar]
reverse_iteratorstd::reverse_iterator<iterator>[editar]
const_reverse_iteratorstd::reverse_iterator<const_iterator>[editar]

[editar]Funciones miembro

Construye el contenedor deque.
(función miembro pública)[editar]
Destruye el contenedor deque.
(función miembro pública)[editar]
Asigna valores al contenedor.
(función miembro pública)[editar]
Asigna valores al contenedor.
(función miembro pública)[editar]
Asigna un rango de valores al contenedor.
(función miembro pública)[editar]
Devuelve el asignador de memoria asociado.
(función miembro pública)[editar]
Acceso a elementos
Accede al elemento especificado con comprobación de límites.
(función miembro pública)[editar]
Accede el elemento especificado.
(función miembro pública)[editar]
Accede al primer elemento.
(función miembro pública)[editar]
Accede al último elemento.
(función miembro pública)[editar]
Iteradores
Devuelve un iterador al principio.
(función miembro pública)[editar]
(C++11)
Devuelve un iterador al final.
(función miembro pública)[editar]
Devuelve un iterador inverso al principio.
(función miembro pública)[editar]
(C++11)
Devuelve un iterador inverso al final.
(función miembro pública)[editar]
Capacidad
Comprueba si el contenedor está vacío.
(función miembro pública)[editar]
Devuelve el número de elementos.
(función miembro pública)[editar]
Devuelve el número máximo posible de elementos.
(función miembro pública)[editar]
Reduce el uso de memoria liberando memoria no utilizada.
(función miembro pública)[editar]
Modificadores
Borra el contenido.
(función miembro pública)[editar]
Inserta elementos
(función miembro pública)[editar]
Inserta un rango de elementos.
(función miembro pública)[editar]
(C++11)
Construye el elemento en el sitio.
(función miembro pública)[editar]
Borra elementos
(función miembro pública)[editar]
Agrega elementos al final.
(función miembro pública)[editar]
Construye un elemento en el sitio al final.
(función miembro pública)[editar]
Agrega un rango de elementos al final.
(función miembro pública)[editar]
Remueve el último elemento.
(función miembro pública)[editar]
Inserta un elemento al principio del contenedor.
(función miembro pública)[editar]
Construye un elemento en el sitio al principio del contenedor.
(función miembro pública)[editar]
Agrega un rango de elementos al principio.
(función miembro pública)[editar]
Remueve el primer elemento.
(función miembro pública)[editar]
Cambia el número de elementos almacenados.
(función miembro pública)[editar]
Intercambia el contenido.
(función miembro pública)[editar]

[editar]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 deque.
(plantilla de función)[editar]
Especializa el algoritmo std::swap.
(plantilla de función)[editar]
Borra todos los elementos que satisfacen un criterio específico.
(plantilla de función)[editar]

[editar]Guías de deducción(desde C++17)

[editar]Ejemplo

#include <iostream>#include <deque>   int main(){// Crear cola doblemente terminada que contiene enteros std::deque<int> d ={7, 5, 16, 8};   // Agregar un entero al principio y al final de la cola d.push_front(13); d.push_back(25);   // Iterar e imprimir los valores en la colafor(int n : d){std::cout<< n <<'\n';}}

Salida:

13 7 5 16 8 25

[editar]Véase también

Adapta un contenedor para proporcionar una cola (estructura de datos PEPS o FIFO, del inglés first in, first out).
(plantilla de clase)[editar]
close