std::vector<T,Allocator>:: operator=
|
vector
&
operator
=
(
const
vector
&
other
)
;
|
(1) | (constexpr desde C++20) |
| (2) | ||
|
vector
&
operator
=
(
vector
&&
other
)
;
|
(desde C++11)
(hasta C++17) |
|
|
vector
&
operator
=
(
vector
&&
other
)
noexcept ( /* ver más abajo */ ) ; |
(desde C++17)
(constexpr desde C++20) |
|
|
vector
&
operator
=
(
std::
initializer_list
<
value_type
>
ilist
)
;
|
(3) |
(desde C++11)
(constexpr desde C++20) |
Reemplaza el contenido del contenedor.
Sea
traits
como
std::
allocator_traits
<
allocator_type
>
:
|
Si traits :: propagate_on_container_copy_assignment :: value es true , el asignador de * this es reemplazado por una copia de other . Si el asignador de * this después de la asignación comparara desigual a su valor anterior, el asignador antiguo se utiliza para desasignar la memoria, luego el nuevo asignador se utiliza para asignarla antes de copiar los elementos. De lo contrario, la memoria propiedad de * this puede ser reutilizada cuando sea posible. En cualquier caso, los elementos originalmente pertenecientes a * this pueden ser destruidos o reemplazados por asignación de copia elemento por elemento. |
(desde C++11) |
Contenidos |
Parámetros
| other | - | otro contenedor para usar como fuente de datos |
| ilist | - | lista de inicializadores para usar como fuente de datos |
Valor de retorno
* this
Complejidad
Excepciones
|
2)
noexcept
especificación:
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 del contenedor (sobrecarga ( 2 ) ), a menos que la asignación de movimiento elemento por elemento sea forzada por asignadores incompatibles, las referencias, punteros e iteradores (excepto el iterador final) a other permanecen válidos, pero referencian 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 a través de LWG issue 2321 .
Ejemplo
El siguiente código utiliza operator = para asignar un std::vector a otro:
#include <initializer_list> #include <iostream> #include <iterator> #include <vector> void print(const auto comment, const auto& container) { auto size = std::size(container); std::cout << comment << "{ "; for (const auto& element : container) std::cout << element << (--size ? ", " : " "); std::cout << "}\n"; } int main() { std::vector<int> x{1, 2, 3}, y, z; const auto w = {4, 5, 6, 7}; std::cout << "Initially:\n"; print("x = ", x); print("y = ", y); print("z = ", z); std::cout << "Copy assignment copies data from x to y:\n"; y = x; print("x = ", x); print("y = ", y); std::cout << "Move assignment moves data from x to z, modifying both x and z:\n"; z = std::move(x); print("x = ", x); print("z = ", z); std::cout << "Assignment of initializer_list w to z:\n"; z = w; print("w = ", w); print("z = ", z); }
Salida:
Initially:
x = { 1, 2, 3 }
y = { }
z = { }
Copy assignment copies data from x to y:
x = { 1, 2, 3 }
y = { 1, 2, 3 }
Move assignment moves data from x to z, modifying both x and z:
x = { }
z = { 1, 2, 3 }
Assignment of initializer_list w to z:
w = { 4, 5, 6, 7 }
z = { 4, 5, 6, 7 }
Véase también
construye el
vector
(función miembro pública) |
|
|
asigna valores al contenedor
(función miembro pública) |