std::list<T,Allocator>:: splice
|
void
splice
(
const_iterator pos, list
&
other
)
;
|
(1) | (constexpr desde C++26) |
|
void
splice
(
const_iterator pos, list
&&
other
)
;
|
(2) |
(desde C++11)
(constexpr desde C++26) |
|
void
splice
(
const_iterator pos, list
&
other, const_iterator it
)
;
|
(3) | (constexpr desde C++26) |
|
void
splice
(
const_iterator pos, list
&&
other, const_iterator it
)
;
|
(4) |
(desde C++11)
(constexpr desde C++26) |
|
void
splice
(
const_iterator pos, list
&
other,
const_iterator first, const_iterator last ) ; |
(5) | (constexpr desde C++26) |
|
void
splice
(
const_iterator pos, list
&&
other,
const_iterator first, const_iterator last ) ; |
(6) |
(desde C++11)
(constexpr desde C++26) |
Transfiere elementos de other a * this . Los elementos se insertan en pos .
Si se satisface cualquiera de las siguientes condiciones, el comportamiento es indefinido:
-
pos
no está en el rango
[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 antes del cual se insertará el contenido |
| other | - | otro contenedor desde el cual transferir el contenido |
| it | - | el 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 |
Complejidad
Ejemplo
#include <iostream> #include <list> std::ostream& operator<<(std::ostream& ostr, const std::list<int>& list) { for (auto& i : list) ostr << ' ' << i; return ostr; } int main () { std::list<int> list1{1, 2, 3, 4, 5}; std::list<int> list2{10, 20, 30, 40, 50}; auto it = list1.begin(); std::advance(it, 2); list1.splice(it, list2); std::cout << "list1:" << list1 << '\n'; std::cout << "list2:" << list2 << '\n'; list2.splice(list2.begin(), list1, it, list1.end()); std::cout << "list1:" << list1 << '\n'; std::cout << "list2:" << list2 << '\n'; }
Salida:
list1: 1 2 10 20 30 40 50 3 4 5 list2: list1: 1 2 10 20 30 40 50 list2: 3 4 5
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 250 | C++98 |
las referencias e iteradores al elemento(s)
movido(s) eran todos invalidados |
se refieren o apuntan al
mismo elemento(s) en * this |
| N2525 | C++98 |
no se podía garantizar el empalme O(1) si
get_allocator ( ) ! = other. get_allocator ( ) |
el comportamiento es
indefinido en este caso |
Véase también
|
fusiona dos listas ordenadas
(función miembro pública) |
|
|
elimina elementos que cumplen criterios específicos
(función miembro pública) |