std::inplace_vector<T,N>::operator=
De es.cppreference.net
constexpr inplace_vector& operator=( const inplace_vector& other );
|
(1) | (desde C++26) |
constexpr inplace_vector& operator=( inplace_vector&& other )
noexcept(/* see below */);
|
(2) | (desde C++26) |
constexpr inplace_vector& operator=( std::initializer_list<T> init );
|
(3) | (desde C++26) |
Reemplaza el contenido del inplace_vector.
1) Operador de asignación de copia. Reemplaza el contenido con una copia del contenido de
other. Este operador es trivial si
std::inplace_vector<T, N> tiene un destructor trivial, y std::is_trivially_copy_constructible_v<T> && std::is_trivially_copy_assignable_v<T> es true.2) Operador de asignación de movimiento. Reemplaza el contenido con el de
other usando semántica de movimiento (es decir, los datos en other se mueven desde other hacia este contenedor). other está en un estado válido pero no especificado después. Este operador es trivial si
std::inplace_vector<T, N> tiene un destructor trivial, y std::is_trivially_move_constructible_v<T> && std::is_trivially_move_assignable_v<T> es true. 3) Reemplaza el contenido con los identificados por la lista de inicialización
init.Parámetros
| other | - |
otro
inplace_vector
que se utilizará como fuente para inicializar los elementos del contenedor
|
| init | - | lista de inicialización para inicializar los elementos del contenedor |
Complejidad
1,2)
Lineal en el tamaño de
*
this
y
other
.
3)
Lineal en el tamaño de
*
this
y
init
.
Excepciones
2)
noexcept
especificación:
noexcept
(
N
==
0
||
(
std::
is_nothrow_move_assignable_v
<
T
>
&&
Ejemplo
Ejecutar este código
#include <initializer_list> #include <inplace_vector> #include <new> #include <print> #include <ranges> #include <string> int main() { std::inplace_vector<int, 4> x({1, 2, 3}), y; std::println("Inicialmente:"); std::println("x = {}", x); std::println("y = {}", y); std::println("La asignación por copia copia datos de x a y:"); y = x; // overload (1) std::println("x = {}", x); std::println("y = {}", y); std::inplace_vector<std::string, 3> z, w{"\N{CAT}", "\N{GREEN HEART}"}; std::println("Inicialmente:"); std::println("z = {}", z); std::println("w = {}", w); std::println("La asignación por movimiento mueve datos de w a z:"); z = std::move(w); // overload (2) std::println("z = {}", z); std::println("w = {}", w); // w is in valid but unspecified state auto l = {4, 5, 6, 7}; std::println("Asignación de initializer_list {} a x:", l); x = l; // overload (3) std::println("x = {}", x); std::println("La asignación de initializer_list con tamaño mayor que N lanza excepción:"); try { x = {1, 2, 3, 4, 5}; // throws: (initializer list size == 5) > (capacity N == 4) } catch(const std::bad_alloc& ex) { std::println("ex.what(): {}", ex.what()); } }
Salida posible:
Inicialmente: x = [1, 2, 3] y = [] La asignación por copia copia datos de x a y: x = [1, 2, 3] y = [1, 2, 3] Inicialmente: z = [] w = ["🐈", "💚"] La asignación por movimiento mueve datos de w a z: z = ["🐈", "💚"] w = ["", ""] Asignación de initializer_list [4, 5, 6, 7] a x: x = [4, 5, 6, 7] La asignación de initializer_list con tamaño mayor que N lanza excepción: ex.what(): std::bad_alloc
Véase también
construye el
inplace_vector
(función miembro pública) |
|
|
asigna valores al contenedor
(función miembro pública) |