Namespaces
Variants

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

From cppreference.net

template < container-compatible-range < T > R >
constexpr void append_range ( R && rg ) ;
(desde C++26)

Inserta copias de elementos del rango rg antes de end() , en orden no inverso.


Cada iterador en rg es desreferenciado exactamente una vez.

Contenidos

Parámetros

rg - un rango compatible con contenedor , es decir, un input_range cuyos elementos son convertibles a T
Requisitos de tipo
-
Si T no es EmplaceConstructible en inplace_vector desde * ranges:: begin ( rg ) , el comportamiento es indefinido.

Complejidad

Lineal en tamaño de rg . El número de llamadas al constructor de T es exactamente igual al std :: ranges:: size ( rg ) ) .

Excepciones

Lanza std::bad_alloc si std :: ranges:: size ( rg ) > N . Si se lanza una excepción distinta de la del constructor de copia, constructor de movimiento, operador de asignación u operador de asignación de movimiento de T o por cualquier operación de InputIterator , no hay efectos. En caso contrario, si se lanza una excepción, entonces size ( ) >= n y los elementos en el rango [ 0 , n ) no se modifican, donde n es el valor de size() antes de esta llamada.

Ejemplo

#include <cassert>
#include <inplace_vector>
#include <iostream>
int main()
{
    using I = std::inplace_vector<int, 8>;
    auto head = I{1, 2, 3, 4};
    const auto tail = {-5, -6, -7};
    head.append_range(tail);
    assert(head.size() == 7 and (head == I{1, 2, 3, 4, -5, -6, -7}));
    try
    {
        head.append_range(tail); // lanza excepción: sin espacio
    }
    catch(const std::bad_alloc&)
    {
        std::cout << "std::bad_alloc\n";
    }
}

Salida:

std::bad_alloc

Véase también

intenta agregar un rango de elementos al final
(función miembro pública)
inserta un rango de elementos
(función miembro pública)
agrega un elemento al final
(función miembro pública)
construye un elemento en el lugar al final
(función miembro pública)