Espacios de nombres
Variantes

std::vector<T,Allocator>::vector

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> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><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> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><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> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
(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.

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 vector(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. Después del movimiento, se garantiza que other está empty().
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. (en ese caso, no se garantiza que other esté vacía después de la operación de movimiento.)

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.

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) [editar]
Asigna valores al contenedor.
(función miembro pública) [editar]