std::vector<T,Allocator>::vector
| (1) | ||
vector(); |
(hasta C++17) | |
vector() noexcept(noexcept(Allocator())); |
(desde C++17) (hasta C++20) |
|
constexpr vector() noexcept(noexcept(Allocator())); |
(desde C++20) | |
| (2) | ||
explicit vector( const Allocator& alloc ); |
(hasta C++17) | |
explicit vector( const Allocator& alloc ) noexcept; |
(desde C++17) (hasta C++20) |
|
constexpr explicit vector( const Allocator& alloc ) noexcept; |
(desde C++20) | |
| (3) | ||
explicit vector( size_type count, {{#pad:|6}} const T& value = T(), {{#pad:|6}} const Allocator& alloc = Allocator()); |
(hasta C++11) | |
vector( size_type count, {{#pad:|6}} const T& value, {{#pad:|6}} const Allocator& alloc = Allocator()); |
(desde C++11) (hasta C++20) |
|
constexpr vector( size_type count, {{#pad:|6}} const T& value, {{#pad:|6}} const Allocator& alloc = Allocator()); |
(desde C++20) | |
| (4) | ||
explicit vector( size_type count ); |
(desde C++11) (hasta C++14) |
|
explicit vector( size_type count, const Allocator& alloc = Allocator() ); |
(desde C++14) (hasta C++20) |
|
constexpr explicit vector( size_type count, {{#pad:|6}} const Allocator& alloc = Allocator() ); |
(desde C++20) | |
| (5) | ||
template< class InputIt > vector( InputIt first, InputIt last, {{#pad:|6}} const Allocator& alloc = Allocator() ); |
(hasta C++20) | |
template< class InputIt > constexpr vector( InputIt first, InputIt last, {{#pad:|6}} const Allocator& alloc = Allocator() ); |
(desde C++20) | |
| (6) | ||
vector( const vector& other ); |
(hasta C++20) | |
constexpr vector( const vector& other ); |
(desde C++20) | |
| (7) | ||
vector( const vector& other, const Allocator& alloc ); |
(desde C++11) (hasta C++20) |
|
constexpr vector( const vector& other, const Allocator& alloc ); |
(desde C++20) | |
| (8) | ||
vector( vector&& other ); |
(desde C++11) (hasta C++17) |
|
vector( vector&& other ) noexcept; |
(desde C++17) (hasta C++20) |
|
constexpr vector( vector&& other ) noexcept; |
(desde C++20) | |
| (9) | ||
vector( vector&& other, const Allocator& alloc ); |
(desde C++11) (hasta C++20) |
|
constexpr vector( vector&& other, const Allocator& alloc ); |
(desde C++20) | |
| (10) | ||
vector( std::initializer_list<T> init, {{#pad:|6}} const Allocator& alloc = Allocator() ); |
(desde C++11) (hasta C++20) |
|
constexpr vector( std::initializer_list<T> init, {{#pad:|6}} const Allocator& alloc = Allocator() ); |
(desde C++20) | |
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. Después del movimiento, se garantiza que other está empty().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. (en ese caso, no se garantiza que other esté vacía después de la operación de movimiento.)
|
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.
La sobrecarga (4) pone los elementos de tipos no-clase en cero, como int, que es distinto del comportamiento de new[], que los deja sin inicializar. Para coincidir con el comportamiento de new[], se puede proporcionar una función Allocator::construct personalizada que deja tales elementos sin inicializar.
Ejemplo
#include <vector>
#include <string>
#include <iostream>
template<typename T>
std::ostream& operator<<(std::ostream& s, const std::vector<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::vector<std::string> palabras1 {"vaya", "la", "mula", "baya"};
std::cout << "palabras1: " << palabras1 << '\n';
// palabras2 == palabras1
std::vector<std::string> palabras2(palabras1.begin(), palabras1.end());
std::cout << "palabras2: " << palabras2 << '\n';
// palabras3 == palabras1
std::vector<std::string> palabras3(palabras1);
std::cout << "palabras3: " << palabras3 << '\n';
// palabras4 es {"Ma", "Ma", "Ma", "Ma", "Ma"}
std::vector<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) |