Namespaces
Variants

std::inplace_vector<T,N>::try_emplace_back

De es.cppreference.net
 
 
 
 
template< class... Args >
constexpr std::optional<reference> try_emplace_back( Args&&... args );
(desde C++26)

Agrega condicionalmente un objeto de tipo T al final del contenedor.

Si size() == capacity() es true, no hay efectos. De lo contrario, agrega, mediante inicialización directa sin lista con std::forward<Args>(args)..., un objeto de tipo T.

Ningún iterador o referencia se invalida, excepto end(), que se invalida si ocurre la inserción.

Parámetros

args - argumentos a reenviar al constructor del elemento
Requisitos de tipo
-
T debe ser EmplaceConstructible en inplace_vector desde std:: forward < Args > ( args ) ... .

Valor de retorno

std:: addressof ( back ( ) ) si size ( ) < capacity ( ) , nullptr en caso contrario.

Complejidad

Constante.

Excepciones

Cualquier excepción lanzada por la inicialización del elemento insertado. Si se lanza una excepción por cualquier motivo, esta función no tiene efecto ( garantía fuerte de seguridad de excepciones ).

Notas

Prueba de características macro Valor Estándar Característica
__cpp_lib_inplace_vector 202603L (C++26) Mejor tipo de retorno (std::optional<reference> en lugar de pointer) para try_push_back y try_emplace_back

Ejemplo

#include <cassert>
#include <complex>
#include <inplace_vector>
#include <optional>

int main()
{
    using namespace std::complex_literals;
    using C = std::complex<double>;
    using I = std::inplace_vector<C, 3>;
    auto v = I{1.0 + 2.0i, 3.0 + 4.0i};

    std::optional<C&> c = v.try_emplace_back(5.0, 6.0);
    assert(*c == 5.0 + 6.0i);
    assert((v == I{1.0 + 2.0i, 3.0 + 4.0i, 5.0 + 6.0i}));

    c = v.try_emplace_back(7.0, 8.0); // no space => no insertion
    assert(c == std::nullopt);
    assert((v == I{1.0 + 2.0i, 3.0 + 4.0i, 5.0 + 6.0i}));
}

Véase también

construye un elemento in-situ al final
(función miembro pública)
añade un elemento al final
(función miembro pública)
añade un rango de elementos al final
(función miembro pública)
intenta añadir un rango de elementos al final
(función miembro pública)
construye incondicionalmente un elemento in-situ al final
(función miembro pública)
añade incondicionalmente un elemento al final
(función miembro pública)
elimina el último elemento
(función miembro pública)
crea un std::back_insert_iterator del tipo inferido del argumento
(plantilla de función)