Espacios de nombres
Variantes

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

De cppreference.com

[edit template]
 
 
 
 
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
deque();
(1)
explicit deque( const Allocator& alloc );
(2)
(3)
explicit deque( size_type count, {{#pad:|5}} const T& value = T(), {{#pad:|5}} const Allocator& alloc = Allocator());
(hasta C++11)
         deque( size_type count, {{#pad:|5}} const T& value, {{#pad:|5}} const Allocator& alloc = Allocator());
(desde C++11)
(4)
explicit deque( size_type count );
(desde C++11)
(hasta C++14)
explicit deque( size_type count, const Allocator& alloc = Allocator() );
(desde C++14)
template< class InputIt > deque( InputIt first, InputIt last, {{#pad:|5}} const Allocator& alloc = Allocator() );
(5)
deque( const deque& other );
(6)
deque( const deque& other, const Allocator& alloc );
(7) (desde C++11)
deque( deque&& other );
(8) (desde C++11)
deque( deque&& other, const Allocator& alloc );
(9) (desde C++11)
deque( std::initializer_list<T> init, {{#pad:|5}} const Allocator& alloc = Allocator() );
(10) (desde C++11)

Construye un nuevo contenedor a partir de una variedad de fuentes de datos, opcionalmente usando un asignador de memoria alloc proporcionado por el usuario.

1) Constructor por defecto. Construye un contenedor vacío con un asignador construido por defecto..
2) Construye un contenedor vacío con el asignador alloc dado.
3) Construye el contenedor con count copias de elementos con valor value.
4) Construye el contenedor con count instancias insertadas por defecto de T. No se hacen copias.
5) Construye el contenedor con el contenido del rango [first, last).

Este constructor tiene el mismo efecto que deque(static_cast<size_type>(first), static_cast<value_type>(last), a) si

(hasta C++11)

Esta sobrecarga solo participa en la resolución de sobrecargas si InputIt satisface InputIterator, para evitar ambigüedad con la sobrecarga (3).

(desde C++11)
6) Constructor de copia. Construye el contenedor con la copia del contenido de other.

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

(desde C++11)
7) Construye el contenedor con la copia del contenido de other, usando alloc como el asignador.

El parámetro de plantilla Allocator solo se deduce a partir del primer argumento mientras se usa en la deducción de argumentos de plantillas de clase.

(desde C++23)
8) Constructor de movimiento. Construye el contenedor con el contenido de other usando la semántica de movimiento. El asignador se obtiene mediante la construcción por movimiento del asignador que pertenece a other.
9) Constructor de movimiento extendido al asignador. Usar a alloc como el asignador para el nuevo contenedor, mover el contenido de other; si alloc != other.get_allocator(), esto resulta en una operación de movimiento elemento por elemento.

El parámetro de plantilla Allocator solo se deduce a partir del primer argumento mientras se usa en la deducción de argumentos de plantillas de clase.

(desde C++23)
10) Construye el contenedor con el contenido de la lista de inicializadores init.

Parámetros

alloc - Asignador a usar para todas las asignaciones de memoria para este contenedor.
count - El tamaño del contenedor.
value - El valor con el cual inicializar los elementos del contenedor.
first, last - El rango del cual copiar los elementos.
other - Otro contenedor a usar como fuente con el cual inicializar los elementos del contenedor.
init - Lista de inicializadores con la cual inicializar los elementos del contenedor.

Complejidad

1-2) Constante.
3-4) Lineal en count.
5) Lineal en la distancia entre first y last.
6-7) Lineal en el tamaño de other.
8) Constante.
9) Lineal si alloc != other.get_allocator(), de lo contrario, constante.
10) Lineal en el tamaño de init.

Excepciones

Las llamadas a Allocator::allocate pueden lanzar.

Notas

Después de la construcción por movimiento de un contenedor (la sobrecarga (8)), las referencias, punteros e iteradores (aparte del iterador al final) a other permanecen válidos, pero se refieren a los elementos que ahora se encuentran en *this. El estándar actual da esta garantía vía la generalización en [container.requirements.general]/12, y una garantía más directa está bajo consideración vía LWG 2321.

Ejemplo

#include <deque>
#include <string>
#include <iostream>

template<typename T>
std::ostream& operator<<(std::ostream& s, const std::deque<T>& v) 
{
    s.put('[');
    char coma[3] = {'\0', ' ', '\0'};
    for (const auto& e : v) {
        s << coma << e;
        coma[0] = ',';
    }
    return s << ']';
}

int main() 
{
    // Sintaxis de la lista de inicializadores en C++11:
    std::deque<std::string> palabras1 {"vaya", "la", "mula", "baya"};
    std::cout << "palabras1: " << palabras1 << '\n';

    // palabras2 == palabras1
    std::deque<std::string> palabras2(palabras1.begin(), palabras1.end());
    std::cout << "palabras2: " << palabras2 << '\n';

    // palabras3 == palabras1
    std::deque<std::string> palabras3(palabras1);
    std::cout << "palabras3: " << palabras3 << '\n';

    // palabras4 es {"Ma", "Ma", "Ma", "Ma", "Ma"}
    std::deque<std::string> palabras4(5, "Ma");
    std::cout << "palabras4: " << palabras4 << '\n';
}

Salida:

palabras1: [vaya, la, mula, baya]
palabras2: [vaya, la, mula, baya]
palabras3: [vaya, la, mula, baya]
palabras4: [Ma, Ma, Ma, Ma, Ma]

Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 2193 C++11 El constructor por defecto es explícito. Se hizo no explícito.

Véase también

Asigna valores al contenedor.
(función miembro pública) [editar]
Asigna valores al contenedor.
(función miembro pública) [editar]