std::inplace_vector<T,N>:: operator=
From cppreference.net
<
cpp
|
container
|
inplace vector
|
constexpr
inplace_vector
&
operator
=
(
const
inplace_vector
&
other
)
;
|
(1) | (desde C++26) |
|
constexpr
inplace_vector
&
operator
=
(
inplace_vector
&&
other
)
noexcept ( /* ver más abajo */ ) ; |
(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
. También un
operador de asignación de copia 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
. Reemplaza el contenido con una copia del contenido de
other
.
2)
Operador de asignación de movimiento
. También un
operador de asignación de movimiento 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
. Reemplaza el contenido con el de
other
usando semántica de movimiento (es decir, los datos en
other
se mueven desde
other
a este contenedor).
other
queda en un estado válido pero no especificado después.
3)
Reemplaza el contenido con aquel identificado por la lista de inicialización
init
.
Contenidos |
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) |