Espacios de nombres
Variantes

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

De cppreference.com
 
 
 
 
<tbody> </tbody> <tbody class="t-dcl-rev "> </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>
vector& operator=( const vector& other );
(hasta C++20)
constexpr vector& operator=( const vector& other );
(desde C++20)
(2)
vector& operator=( vector&& other );
(desde C++11)
(hasta C++17)
vector& operator=( vector&& other ) noexcept(/* véase más abajo */);
(desde C++17)
(hasta C++20)
constexpr vector& operator=( vector&& other ) noexcept(/* véase más abajo */);
(desde C++20)
(3)
vector& operator=( std::initializer_list<T> ilist );
(desde C++11)
(hasta C++20)
constexpr vector& operator=( std::initializer_list<T> ilist );
(desde C++20)

Reemplaza el contenido del contenedor.

1) Operador de asignación de copia. Reemplaza el contenido con una copia del contenido de other.Si std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value es true, el asignador de memoria destino se reemplaza con una copia del asignador de memoria fuente. Si los asignadores destino y fuente no se comparan como iguales, se usa el asignador destino (*this) para desasignar la memoria, luego se usa el asignador de other para asignarla antes de copiar los elementos. (desde C++11).
2) Operador de asignación de movimiento. Reemplaza el contenido con el de other usando semántica de movimiento (p. ej., los datos en other se mueven de other a este contenedor). Posteriormente, other se deja en un estado válido pero sin especificar. Si std::allocator_traits<allocator_type>::propagate_on_container_move_assignment::value es true, el asignador de memoria destino se reemplaza con una copia del asignador de memoria fuente. Si es false y los asignadores fuente y destino no se comparan como iguales, el asignador destino no puede adueñarse de la memoria del asignador fuente y debe asignar cada elemento individualmente mediante movimiento, asignando memoria adicional usando su propio asignador a medida que sea necesario. En cualquier caso, todos los elementos presentes originalmente en *this ya sea se destruyen o se reemplazan por una asignación de movimiento de elemento por elemento.
3) Reemplaza el contenido con el de aquel identificado por la lista de inicializadores ilist.

Parámetros

other - El otro contenedor a usar como fuente de datos.
ilist - La lista de inicializadores a usar como fuente de datos.

Valor de retorno

*this

Complejidad

1) Lineal con respecto al tamaño de *this y other.
2) Lineal con respecto al tamaño de *this a menos que los asignadores de memoria no se comparen como iguales y no propaguen, en cuyo caso la complejidad será lineal con respecto al tamaño de *this y other.
3) Lineal con respecto al tamaño de *this y ilist.

Excepciones

2)
Especificación noexcept:   (desde C++11)
<tbody> </tbody>
noexcept(std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value || std::allocator_traits<Allocator>::is_always_equal::value)
(desde C++17)

Notas

Después de la asignación de movimiento de un contenedor (sobrecarga (2)), a menos que se fuerce una asignación de movimiento de elemento por elemento por causa de asignadores incompatibles, las referencias, punteros e iteradores (distintos al iterador el final) a other siguen siendo válidos, pero se refieren a los elementos que ahora se encuentran en *this. El estándar actual da esta garantía mediante una afirmación general en [container.requirements.general]/12, y una garantía más directa está bajo consideración mediante Asunto LWG 2321.

Ejemplo

El siguiente código usa operator= para asignar un std::vector a otro:

#include <vector>
#include <iostream>

void display_sizes(char const* comment,
                   const std::vector<int>& nums1,
                   const std::vector<int>& nums2,
                   const std::vector<int>& nums3)
{
    std::cout << comment
              << " nums1: " << nums1.size() << ','
              << " nums2: " << nums2.size() << ','
              << " nums3: " << nums3.size() << '\n';
}

void display(char const* comment, const std::vector<int>& v)
{
    std::cout << comment << "{ ";
    for (int e : v) {
        std::cout << e << ' ';
    }
    std::cout << "}\n";
}

int main()
{
    std::vector<int> nums1 {3, 1, 4, 6, 5, 9};
    std::vector<int> nums2;
    std::vector<int> nums3;

    display_sizes("Inicialmente:\n", nums1, nums2, nums3);

    // la asignación de copia copia los datos de nums1 a nums2
    nums2 = nums1;

    display_sizes("Despues de la asignacion:\n", nums1, nums2, nums3);

    // la asignación de movimiento mueve los datos de nums1 a nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    display_sizes("Despues de la asignacion de movimiento:\n", nums1, nums2, nums3);

    display("Ahora nums3 = ", nums3);

    // la asignación de copia de una lista de inicializadores
    // copia los datos a nums3
    nums3 = {1, 2, 3};

    display("Despues de la asignacion de initializer_list \n nums3 = ", nums3);
}

Salida:

Inicialmente:
 nums1: 6, nums2: 0, nums3: 0
Despues de la asignacion:
 nums1: 6, nums2: 6, nums3: 0
Despues de la asignacion de movimiento:
 nums1: 0, nums2: 6, nums3: 6
Ahora nums3 = { 3 1 4 6 5 9 }
Despues de la asignacion de initializer_list
 nums3 = { 1 2 3 }

Véase también

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