std::forward_list<T,Allocator>:: splice_after
|
void
splice_after
(
const_iterator pos, forward_list
&
other
)
;
|
(1) |
(desde C++11)
(constexpr desde C++26) |
|
void
splice_after
(
const_iterator pos, forward_list
&&
other
)
;
|
(2) |
(desde C++11)
(constexpr desde C++26) |
|
void
splice_after
(
const_iterator pos, forward_list
&
other,
const_iterator it ) ; |
(3) |
(desde C++11)
(constexpr desde C++26) |
|
void
splice_after
(
const_iterator pos, forward_list
&&
other,
const_iterator it ) ; |
(4) |
(desde C++11)
(constexpr desde C++26) |
|
void
splice_after
(
const_iterator pos, forward_list
&
other,
const_iterator first, const_iterator last ) ; |
(5) |
(desde C++11)
(constexpr desde C++26) |
|
void
splice_after
(
const_iterator pos, forward_list
&&
other,
const_iterator first, const_iterator last ) ; |
(6) |
(desde C++11)
(constexpr desde C++26) |
Transfiere elementos desde other hacia * this . Los elementos se insertan después de pos .
Si se satisface cualquiera de las siguientes condiciones, el comportamiento es indefinido:
-
pos
no está en el rango
(before_begin(),end()). - get_allocator ( ) == other. get_allocator ( ) es false .
[
begin
(
)
,
end
(
)
)
, el comportamiento es indefinido.
(
first
,
last
)
.
-
(first,last)no es un rango válido en other , -
Cualquier iterador en
(first,last)no es desreferenciable. -
pos
está en
(first,last).
No se invalidan iteradores ni referencias. Si * this y other hacen referencia a objetos diferentes, los iteradores de los elementos transferidos ahora hacen referencia a * this , no a other .
Contenidos |
Parámetros
| pos | - | elemento después del cual se insertará el contenido |
| other | - | otro contenedor del cual transferir el contenido |
| it | - | iterador que precede al iterador del elemento a transferir desde other a * this |
| first, last | - | el par de iteradores que define el rango de elementos a transferir desde other a * this |
Excepciones
Complejidad
Ejemplo
#include <cassert> #include <forward_list> int main() { using F = std::forward_list<int>; // Demostrar el significado del rango abierto (first, last) // en la sobrecarga (5): el primer elemento de l1 no se transfiere. F l1 = {1, 2, 3, 4, 5}; F l2 = {10, 11, 12}; l2.splice_after(l2.cbegin(), l1, l1.cbegin(), l1.cend()); // No es equivalente a l2.splice_after(l2.cbegin(), l1); // que es equivalente a // l2.splice_after(l2.cbegin(), l1, l1.cbefore_begin(), l1.end()); assert((l1 == F{1})); assert((l2 == F{10, 2, 3, 4, 5, 11, 12})); // Sobrecarga (1) F x = {1, 2, 3, 4, 5}; F y = {10, 11, 12}; x.splice_after(x.cbegin(), y); assert((x == F{1, 10, 11, 12, 2, 3, 4, 5})); assert((y == F{})); // Sobrecarga (3) x = {1, 2, 3, 4, 5}; y = {10, 11, 12}; x.splice_after(x.cbegin(), y, y.cbegin()); assert((x == F{1, 11, 2, 3, 4, 5})); assert((y == F{10, 12})); // Sobrecarga (5) x = {1, 2, 3, 4, 5}; y = {10, 11, 12}; x.splice_after(x.cbegin(), y, y.cbegin(), y.cend()); assert((x == F{1, 11, 12, 2, 3, 4, 5})); assert((y == F{10})); }
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2045 | C++11 |
No se podía garantizar el splicing O(1) si
get_allocator ( ) ! = other. get_allocator ( ) |
el comportamiento es
indefinido en este caso |
| LWG 2222 | C++11 |
el elemento apuntado por
it
no se transfiere, pero punteros, referencias e
iteradores que se refieren a él se referirían a un elemento en * this después del splicing |
aún se refieren al
elemento en other |
Véase también
|
combina dos listas ordenadas
(función miembro pública) |
|
|
elimina elementos que cumplen criterios específicos
(función miembro pública) |
|
|
devuelve un iterador al elemento anterior al inicio
(función miembro pública) |