std::vector<T,Allocator>::vector
vector() : vector(Allocator()) {}
|
(1) | (desde C++11) (hasta C++17) |
vector() noexcept(noexcept(Allocator())) : vector(Allocator()) {}
|
(desde C++17) (constexpr desde C++20) |
|
explicit vector( const Allocator& alloc = Allocator() );
|
(2) | (hasta C++11) |
explicit vector( const Allocator& alloc );
|
(desde C++11) (noexcept desde C++17) (constexpr desde C++20) |
|
explicit vector( size_type count,
const Allocator& alloc = Allocator() );
|
(3) | (desde C++11) |
explicit vector( size_type count, const T& value = T(),
const Allocator& alloc = Allocator() );
|
(4) | (hasta C++11) |
vector( size_type count, const T& value,
const Allocator& alloc = Allocator() );
|
(desde C++11) (constexpr desde C++20) |
|
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
|
(5) | (constexpr desde C++20) |
template< container-compatible-range<T> R >
constexpr vector( std::from_range_t, R&& rg,
const Allocator& alloc = Allocator() );
|
(6) | (desde C++23) |
vector( const vector& other );
|
(7) | (constexpr desde C++20) |
vector( vector&& other );
|
(8) | (desde C++11) (noexcept desde C++17) (constexpr desde C++20) |
vector( const vector& other, const Allocator& alloc );
|
(9) | (desde C++11) (constexpr desde C++20) (hasta C++23) |
constexpr vector( const vector& other,
const std::type_identity_t<Allocator>& alloc );
|
(desde C++23) | |
vector( vector&& other, const Allocator& alloc );
|
(10) | (desde C++11) (constexpr desde C++20) (hasta C++23) |
constexpr vector( vector&& other,
const std::type_identity_t<Allocator>& alloc );
|
(desde C++23) | |
vector( std::initializer_list<T> init,
const Allocator& alloc = Allocator() );
|
(11) | (desde C++11) |
Construye un nuevo vector a partir de una variedad de fuentes de datos, opcionalmente usando un asignador proporcionado por el usuario alloc.
vector vacío con un asignador construido por defecto.Allocator no es ConstruiblePorDefecto, el comportamiento es indefinido.vector vacío con el asignador dado alloc.vector con count objetos insertados por defecto de T. No se realizan copias.vector con count copias de elementos con valor value.
|
Si |
(desde C++11) |
vector con el contenido del rango [first, last). Cada iterador en [first, last) es desreferenciado exactamente una vez.
|
Si |
(hasta C++11) |
|
Esta sobrecarga participa en la resolución de sobrecarga solo si Si se cumple alguna de las siguientes condiciones, el comportamiento es indefinido:
|
(desde C++11) |
vector con el contenido del rango rg. Cada iterador en rg es desreferenciado exactamente una vez.Tno es ConstruibleEnElLugar enstd::vector<T>desde*ranges::begin(rg).Rmodela ni rangoConTamaño ni rangoDirecto, yTno es InsertablePorMovimiento enstd::vector<T>.
vector con el contenido de other.|
El asignador se obtiene como si se llamara a |
(desde C++11) |
other.get_allocator().alloc se usa como asignador.alloc se usa como asignador.vector(il.begin(), il.end(), alloc).Parámetros
| alloc | - | asignador a utilizar para todas las asignaciones de memoria de este contenedor |
| count | - | el tamaño del contenedor |
| value | - | el valor con el que inicializar los elementos del contenedor |
| first, last | - | el par de iteradores que definen el rango de elementos desde el cual copiar los elementos |
| other | - | otro contenedor que se 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
-
Si
InputItsatisface los requisitos de LegacyForwardIterator , entonces:
-
-
El constructor de copia de
Tsolo se llama N veces. - No ocurre reasignación de memoria.
-
El constructor de copia de
- En caso contrario:
-
-
El constructor de copia de
Tse llama O(N) veces. - Ocurre reasignación de memoria O(log N) veces.
-
El constructor de copia de
|
(hasta C++26) |
|
(desde C++26) |
-
- Inicializa exactamente N elementos desde el resultado de desreferenciar iteradores sucesivos de rg .
- No ocurre reasignación de memoria.
- En caso contrario:
-
-
El constructor de copia o movimiento de
Tes llamado O(N) veces. - Ocurre reasignación de memoria O(log N) veces.
-
El constructor de copia o movimiento de
Excepciones
Las llamadas a Allocator :: allocate pueden lanzar excepciones.
Notas
Después de la construcción por movimiento del contenedor (sobrecarga (8)), las referencias, punteros e iteradores que originalmente se refieren a elementos en other permanecen válidos, pero se refieren a elementos que ahora están en *this. El estándar actual garantiza esto mediante la declaración general en [container.reqmts]/67, y se está considerando una garantía más directa mediante LWG issue 2321.
| Macro de prueba de característicasMacro | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | conscientes de rangos construcción e inserción; sobrecarga (6) |
Ejemplo
#include <iostream> #include <string> #include <vector> template<typename T> std::ostream& operator<<(std::ostream& s, const std::vector<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::vector<std::string> words1{"the", "frogurt", "is", "also", "cursed"}; std::cout << "1: " << words1; // words2 == words1 std::vector<std::string> words2(words1.begin(), words1.end()); std::cout << "2: " << words2; // words3 == words1 std::vector<std::string> words3(words1); std::cout << "3: " << words3; // words4 es {"Mo", "Mo", "Mo", "Mo", "Mo"} std::vector<std::string> words4(5, "Mo"); std::cout << "4: " << words4; const auto rg = {"cat", "cow", "crow"}; #ifdef __cpp_lib_containers_ranges std::vector<std::string> words5(std::from_range, rg); // sobrecarga (6) #else std::vector<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 134 | C++98 |
la sobrecarga
(
5
)
permitía hasta
2N
llamadas al constructor
de copia en el caso de iteradores de entrada |
cambiado a O(N) llamadas |
| 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 | se añadió el parámetro |
| N3346 | C++11 |
para la sobrecarga
(
3
)
, los elementos en
el contenedor se inicializaban por valor |
se insertan por defecto |
Véase también
|
asigna valores al contenedor
(función miembro pública) |
|
|
asigna valores al contenedor
(función miembro pública) |