std::list::splice
De cppreference.com
void splice( const_iterator pos, list& other ); |
(1) | |
void splice( const_iterator pos, list&& other ); |
(1) | (desde C++11) |
void splice( const_iterator pos, list& other, const_iterator it ); |
(2) | |
void splice( const_iterator pos, list&& other, const_iterator it ); |
(2) | (desde C++11) |
void splice( const_iterator pos, list& other, const_iterator first, const_iterator last); |
(3) | |
void splice( const_iterator pos, list&& other, const_iterator first, const_iterator last ); |
(3) | (desde C++11) |
Transfiere elementos de una lista a otra.
No se copia ni se mueve ningún elemento, solo se vuelven a apuntar los punteros internos de los nodos de la lista. El comportamiento no está definido si: get_allocator() != other.get_allocator(). Ningún iterador o referencia se invalida, los iteradores de los elementos movidos siguen siendo válidos, pero ahora se refieren a *this, no a other.
1) Transfiere todos los elementos de
other a *this. Los elementos se insertan antes del elemento al que apunta pos. El contenedor other queda vacío después de la operación. El comportamiento no está definido si other se refiere al mismo objeto que *this.2) Transfiere el elemento al que apunta
it de other a *this. El elemento se inserta antes del elemento al que apunta pos.3) Transfiere los elementos en el rango
[first, last) de other a *this. Los elementos se insertan antes del elemento al que apunta pos. El comportamiento no está definido si pos es un iterador en el rango [first, last).Parámetros
| pos | - | Elemento antes del cual se insertará el contenido. |
| other | - | El otro contenedor del cual transferir el contenido. |
| it | - | El elemento a transferir de other a *this.
|
| first, last | - | El rango de elementos a transferir de other a *this.
|
Valor de retorno
(Ninguno)
Excepciones
No lanza nada.
Complejidad
1-2) Constante.
3) Constante si other se refiere al mismo objeto que *this, de lo contrario, lineal en std::distance(first, last).
Ejemplo
Ejecuta este código
#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> lista1 = { 1, 2, 3, 4, 5 };
std::list<int> lista2 = { 10, 20, 30, 40, 50 };
auto it = lista1.begin();
std::advance(it, 2);
lista1.splice(it, lista2);
std::cout << "lista1: " << lista1 << "\n";
std::cout << "lista2: " << lista2 << "\n";
lista2.splice(lista2.begin(), lista1, it, lista1.end());
std::cout << "lista1: " << lista1 << "\n";
std::cout << "lista2: " << lista2 << "\n";
}
Salida:
lista1: 1 2 10 20 30 40 50 3 4 5
lista2:
lista1: 1 2 10 20 30 40 50
lista2: 3 4 5
Véase también
| Fusiona dos listas ordenadas. (función miembro pública) | |
| Elimina elementos que satisfacen un criterio específico. (función miembro pública) |