Namespaces
Variants

std::vector<T,Allocator>:: append_range

From cppreference.net

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

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

Si después de la operación el nuevo size() es mayor que la antigua capacity() ocurre una reasignación de memoria, en cuyo caso todos los iteradores (incluyendo el iterador end() ) y todas las referencias a los elementos quedan invalidados. De lo contrario, solo el iterador end() queda invalidado.

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 se satisface cualquiera de las siguientes condiciones, el comportamiento no está definido:

Complejidad

Si ocurre una reasignación, lineal en el número de elementos del vector resultante; de lo contrario, lineal en el número de elementos insertados más la distancia al end() .

Si se satisface una de las siguientes condiciones, realiza como máximo una reubicación:

(desde C++26)

Excepciones

Si se lanza una excepción que no sea por el 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. Si se lanza una excepción mientras se inserta un único elemento al final y T es CopyInsertable o std::is_nothrow_move_constructible_v <T> es true , no hay efectos. De lo contrario, si se lanza una excepción por el constructor de movimiento de un T no- CopyInsertable , los efectos no están especificados.

Notas

Macro de prueba de características Valor Std Característica
__cpp_lib_containers_ranges 202202L (C++23) Construcción e inserción consciente de rangos

Ejemplo

#include <cassert>
#include <vector>
#include <list>
int main()
{
    auto head = std::vector{1, 2, 3, 4};
    const auto tail = std::list{-5, -6, -7};
#ifdef __cpp_lib_containers_ranges
    head.append_range(tail);
#else
    head.insert(head.end(), tail.cbegin(), tail.cend());
#endif
    assert((head == std::vector{1, 2, 3, 4, -5, -6, -7}));
}

Véase también

inserta un rango de elementos
(función miembro pública)
añade un elemento al final
(función miembro pública)
construye un elemento in situ al final
(función miembro pública)