Namespaces
Variants

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

From cppreference.net

template < container-compatible-range < T > R >
constexpr iterator insert_range ( const_iterator pos, R && rg ) ;
(desde C++26)

Inserta, en orden no inverso, copias de los elementos en rg antes de pos .

Cada iterador en el rango rg es desreferenciado exactamente una vez.

Si rg se superpone con * this , el comportamiento es indefinido.

Contenidos

Parámetros

pos - iterador antes del cual se insertará el contenido ( pos puede ser el end() iterator)
rg - un container compatible range , es decir, un input_range cuyos elementos son convertibles a T
Requisitos de tipo
-
Si se satisface cualquiera de las siguientes condiciones, el comportamiento es indefinido:

Valor de retorno

Un iterador al primer elemento insertado en * this , o pos si rg está vacío.

Excepciones

  • std::bad_alloc , si ranges:: distance ( rg ) + size ( ) > capacity ( ) . Los elementos de * this no se modifican.
  • Cualquier excepción lanzada por la inserción (es decir, por el constructor de copia/movimiento, operador de asignación de movimiento/copia de T ) o por cualquier operación de LegacyInputIterator . Los elementos de * this en el rango [ 0 , pos ) no se modifican.

Ejemplo

#include <cassert>
#include <inplace_vector>
#include <iterator>
#include <new>
#include <print>
int main()
{
    auto v = std::inplace_vector<int, 8>{0, 1, 2, 3};
    auto pos = std::next(v.begin(), 2);
    assert(*pos == 2);
    const auto rg = {-1, -2, -3};
    v.insert_range(pos, rg);
    std::println("{}", v);
    try
    {
        assert(v.size() + rg.size() > v.capacity());
        v.insert_range(pos, rg); // throws: no space
    }
    catch(const std::bad_alloc& ex)
    {
        std::println("{}", ex.what());
    }
}

Salida posible:

[0, 1, -1, -2, -3, 2, 3]
std::bad_alloc

Véase también

inserta elementos
(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)