std::deque<T,Allocator>::deque
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.
alloc dado.count copias de elementos con valor value.[first, last).
|
Este constructor tiene el mismo efecto que |
(hasta C++11) |
|
Esta sobrecarga solo participa en la resolución de sobrecargas si |
(desde C++11) |
other.
|
El asignador se obtiene como si se llamara a |
(desde C++11) |
other, usando alloc como el asignador.
|
El parámetro de plantilla |
(desde C++23) |
other usando la semántica de movimiento. El asignador se obtiene mediante la construcción por movimiento del asignador que pertenece a other. 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 |
(desde C++23) |
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
count.first y last.other.alloc != other.get_allocator(), de lo contrario, constante.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) | |
| Asigna valores al contenedor. (función miembro pública) |