list::splice
Quita elementos de una lista de origen y los inserta en una lista de destino.
// insert the entire source list void splice( const_iterator Where, list<Type, Allocator>& Source ); void splice( const_iterator Where, list<Type, Allocator>&& Source ); // insert one element of the source list void splice( const_iterator Where, list<Type, Allocator>& Source, const_iterator Iter ); void splice( const_iterator Where, list<Type, Allocator>&& Source, const_iterator Iter ); // insert a range of elements from the source list void splice( const_iterator Where, list<Type, Allocator>& Source, const_iterator First, const_iterator Last ); void splice( const_iterator Where, list<Type, Allocator>&& Source, const_iterator First, const_iterator Last );
Parámetros
Where
Posición en la lista de destino anterior a la posición de inserción.Source
Lista de origen que se va a insertar en la lista de destino.Iter
Elemento que se va a insertar de la lista de origen.First
Primer elemento del intervalo que se va a insertar de la lista de origen.Last
Primera posición después del último elemento del intervalo que se va a insertar de la lista de origen.
Comentarios
El primer par de funciones miembro inserta todos los elementos de la lista de origen en la lista de destino, en una posición anterior a la posición denominada Where y quita todos los elementos de la lista de origen. (&Source no debe ser igual que this).
El segundo par de funciones miembro inserta el elemento Iter en una posición anterior a la posición en la lista de destino denominada Where y quita Iter la lista de origen. (Si Where == Iter || Where == ++Iter, no se produce ningún cambio).
El tercer par de funciones miembro inserta el rango designado mediante [First, Last] antes del elemento en la lista de destino denominado Where y quita dicho intervalo de elementos de la lista de origen. (Si &Source == this, el intervalo [First, Last) no debe incluir el elemento al que Where apunta).
Si la inserción de intervalo inserta N elementos y &Source != this, un objeto de la clase iterator se incrementará N veces.
En todos los casos, los iteradores, punteros o referencias que remitan a elementos insertos seguirán siendo válidos y se transferirán al contenedor de destino.
Ejemplo
// list_splice.cpp
// compile with: /EHsc /W4
#include <list>
#include <iostream>
using namespace std;
template <typename S> void print(const S& s) {
cout << s.size() << " elements: ";
for (const auto& p : s) {
cout << "(" << p << ") ";
}
cout << endl;
}
int main()
{
list<int> c1{10,11};
list<int> c2{20,21,22};
list<int> c3{30,31};
list<int> c4{40,41,42,43};
list<int>::iterator where_iter;
list<int>::iterator first_iter;
list<int>::iterator last_iter;
cout << "Beginning state of lists:" << endl;
cout << "c1 = ";
print(c1);
cout << "c2 = ";
print(c2);
cout << "c3 = ";
print(c3);
cout << "c4 = ";
print(c4);
where_iter = c2.begin();
++where_iter; // start at second element
c2.splice(where_iter, c1);
cout << "After splicing c1 into c2:" << endl;
cout << "c1 = ";
print(c1);
cout << "c2 = ";
print(c2);
first_iter = c3.begin();
c2.splice(where_iter, c3, first_iter);
cout << "After splicing the first element of c3 into c2:" << endl;
cout << "c3 = ";
print(c3);
cout << "c2 = ";
print(c2);
first_iter = c4.begin();
last_iter = c4.end();
// set up to get the middle elements
++first_iter;
--last_iter;
c2.splice(where_iter, c4, first_iter, last_iter);
cout << "After splicing a range of c4 into c2:" << endl;
cout << "c4 = ";
print(c4);
cout << "c2 = ";
print(c2);
}
Requisitos
Encabezado: <list>
Espacio de nombres: std