Namespaces
Variants

std::inplace_vector<T,N>:: operator=

From cppreference.net
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 .

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