std::vector<T,Allocator>:: append_range
|
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 | ||
-
|
||
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
|
(C++23)
|
inserta un rango de elementos
(función miembro pública) |
|
añade un elemento al final
(función miembro pública) |
|
|
(C++11)
|
construye un elemento in situ al final
(función miembro pública) |