Namespaces
Variants

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:
3) Lanza std::bad_alloc si init. size ( ) > N .

Ejemplo

#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)