Namespaces
Variants

std::deque<T,Allocator>:: deque

From cppreference.net
deque ( ) : deque ( Allocator ( ) ) { }
(1) (desde C++11)
(constexpr desde C++26)
(2)
explicit deque ( const Allocator & alloc = Allocator ( ) ) ;
(hasta C++11)
explicit deque ( const Allocator & alloc ) ;
(desde C++11)
(constexpr desde C++26)
explicit deque ( size_type count,
const Allocator & alloc = Allocator ( ) ) ;
(3) (desde C++11)
(constexpr desde C++26)
(4)
explicit deque ( size_type count, const T & value = T ( ) ,
const Allocator & alloc = Allocator ( ) ) ;
(hasta C++11)
deque ( size_type count, const T & value,
const Allocator & alloc = Allocator ( ) ) ;
(desde C++11)
(constexpr desde C++26)
template < class InputIt >

deque ( InputIt first, InputIt last,

const Allocator & alloc = Allocator ( ) ) ;
(5) (constexpr desde C++26)
template < container-compatible-range < T > R >

deque ( std:: from_range_t , R && rg,

const Allocator & alloc = Allocator ( ) ) ;
(6) (desde C++23)
(constexpr desde C++26)
deque ( const deque & other ) ;
(7) (constexpr desde C++26)
deque ( deque && other ) ;
(8) (desde C++11)
(constexpr desde C++26)
(9)
deque ( const deque & other, const Allocator & alloc ) ;
(desde C++11)
(hasta C++23)
deque ( const deque & other,
const std:: type_identity_t < Allocator > & alloc ) ;
(desde C++23)
(constexpr desde C++26)
(10)
deque ( deque && other, const Allocator & alloc ) ;
(desde C++11)
(hasta C++23)
deque ( deque && other, const std:: type_identity_t < Allocator > & alloc ) ;
(desde C++23)
(constexpr desde C++26)
deque ( std:: initializer_list < T > init,
const Allocator & alloc = Allocator ( ) ) ;
(11) (desde C++11)
(constexpr desde C++26)

Construye un nuevo deque a partir de diversas fuentes de datos, opcionalmente utilizando un asignador de memoria proporcionado por el usuario alloc .

1) El constructor predeterminado desde C++11. Construye un deque vacío con un asignador construido por defecto.
Si Allocator no es DefaultConstructible , el comportamiento es indefinido.
2) El constructor predeterminado hasta C++11. Construye un deque vacío con el asignador dado alloc .
3) Construye un deque con count objetos insertados por defecto de T . No se realizan copias.
Si T no es DefaultInsertable en deque , el comportamiento es indefinido.
4) Construye un deque con count copias de elementos con valor value .

Si T no es CopyInsertable en deque , el comportamiento es indefinido.

(desde C++11)
5) Construye un deque con los contenidos del rango [ first , last ) . Cada iterador en [ first , last ) es desreferenciado exactamente una vez.

Si InputIt no satisface los requisitos de LegacyInputIterator , la sobrecarga (4) es llamada en su lugar con los argumentos static_cast < size_type > ( first ) , last y alloc .

(hasta C++11)

Esta sobrecarga participa en la resolución de sobrecarga solo si InputIt satisface los requisitos de LegacyInputIterator .

Si T no es EmplaceConstructible en deque desde * first , el comportamiento es indefinido.

(desde C++11)
6) Construye un deque con los contenidos del rango rg . Cada iterador en rg es desreferenciado exactamente una vez.
Si T no es EmplaceConstructible en deque desde * ranges:: begin ( rg ) , el comportamiento es indefinido.
7) El constructor de copia. Construye un deque con el contenido de other .

El asignador se obtiene como si se llamara a
std:: allocator_traits < Allocator > :: select_on_container_copy_construction
( other. get_allocator ( ) )
.

(since C++11)
8) El constructor de movimiento. Construye un deque con los contenidos de other . El asignador se obtiene mediante construcción por movimiento de other. get_allocator ( ) .
9) Igual que el constructor de copia, excepto que alloc se utiliza como el asignador.
Si T no es CopyInsertable en deque , el comportamiento es indefinido.
10) Igual que el constructor de movimiento, excepto que alloc se utiliza como el asignador.
Si T no es MoveInsertable en deque , el comportamiento es indefinido.
11) Equivalente a deque ( il. begin ( ) , il. end ( ) , alloc ) .

Contenidos

Parámetros

alloc - asignador a utilizar para todas las asignaciones de memoria de este contenedor
count - el tamaño del contenedor
value - el valor para inicializar los elementos del contenedor
first, last - el par de iteradores que define el rango fuente de elementos a copiar
other - otro contenedor a utilizar como fuente para inicializar los elementos del contenedor
init - lista de inicialización para inicializar los elementos del contenedor
rg - un rango compatible con el contenedor

Complejidad

1,2) Constante.
3,4) Lineal en count .
5) Lineal en std:: distance ( first, last ) .
6) Lineal en ranges:: distance ( rg ) .
7) Lineal en other. size ( ) .
8) Constante.
9) Lineal en other. size ( ) .
10) Lineal en other. size ( ) si alloc ! = other. get_allocator ( ) , en caso contrario constante.
11) Lineal en init. size ( ) .

Excepciones

Las llamadas a Allocator :: allocate pueden lanzar excepciones.

Notas

Después de la construcción por movimiento del contenedor (sobrecargas ( 8 ) y ( 10 ) ), las referencias, punteros e iteradores (excepto el iterador final) a other permanecen válidos, pero se refieren a elementos que ahora están en * this . El estándar actual ofrece esta garantía mediante la declaración general en [container.reqmts]/67 , y se está considerando una garantía más directa a través de LWG issue 2321 .

Macro de prueba de características Valor Estándar Característica
__cpp_lib_containers_ranges 202202L (C++23) Construcción e inserción con reconocimiento de rangos; sobrecarga ( 6 )

Ejemplo

#include <deque>
#include <iostream>
#include <string>
template<typename T>
std::ostream& operator<<(std::ostream& s, const std::deque<T>& v)
{
    s.put('{');
    for (char comma[]{'\0', ' ', '\0'}; const auto& e : v)
        s << comma << e, comma[0] = ',';
    return s << "}\n";
}
int main()
{
    // Sintaxis de lista de inicialización de C++11:
    std::deque<std::string> words1{"the", "frogurt", "is", "also", "cursed"};
    std::cout << "1: " << words1;
    // words2 == words1
    std::deque<std::string> words2(words1.begin(), words1.end());
    std::cout << "2: " << words2;
    // words3 == words1
    std::deque<std::string> words3(words1);
    std::cout << "3: " << words3;
    // words4 es {"Mo", "Mo", "Mo", "Mo", "Mo"}
    std::deque<std::string> words4(5, "Mo");
    std::cout << "4: " << words4;
    const auto rg = {"cat", "cow", "crow"};
#ifdef __cpp_lib_containers_ranges
    std::deque<std::string> words5(std::from_range, rg); // sobrecarga (6)
#else
    std::deque<std::string> words5(rg.begin(), rg.end()); // sobrecarga (5)
#endif
    std::cout << "5: " << words5;
}

Salida:

1: {the, frogurt, is, also, cursed}
2: {the, frogurt, is, also, cursed}
3: {the, frogurt, is, also, cursed}
4: {Mo, Mo, Mo, Mo, Mo}
5: {cat, cow, crow}

Informes de defectos

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

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 144 C++98 el requisito de complejidad de la sobrecarga ( 5 ) era el mismo
que el de la sobrecarga correspondiente de std::vector
cambiado a complejidad lineal
LWG 237 C++98 el requisito de complejidad de la sobrecarga
( 5 ) era lineal en first - last
cambiado a lineal en
std:: distance ( first, last )
LWG 438 C++98 la sobrecarga ( 5 ) solo llamaría a la sobrecarga ( 4 )
si InputIt es un tipo integral
llama a la sobrecarga ( 4 ) si InputIt
no es un LegacyInputIterator
LWG 2193 C++11 el constructor por defecto era explícito hecho no explícito
LWG 2210 C++11 la sobrecarga ( 3 ) no tenía un parámetro de asignador añadido el parámetro
N3346 C++11 para la sobrecarga ( 3 ) , los elementos en
el contenedor eran inicializados por valor
son insertados por defecto

Véase también

asigna valores al contenedor
(función miembro pública)
asigna valores al contenedor
(función miembro pública)