C++ для начинающих.

12.6.6. Операция list::splice().

Void list::splice( iterator pos, list rhs );

Void list::splice( iterator pos, list rhs, iterator ix );

Void list::splice( iterator pos, list rhs,

Iterator first, iterator last );

Операция splice() имеет три формы: перемещение одного элемента, всех элементов или диапазона из одного списка в другой. В каждом случае передается итератор, указывающий на позицию вставки, а перемещаемые элементы располагаются непосредственно перед ней. Если даны два списка:

Int array[ 10 ] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 };

List int ilist1( array, array + 10 );

List int ilist2( array, array + 2 ); // содержит 0, 1.

То следующее обращение к splice() перемещает первый элемент ilist1 в ilist2. Теперь ilist2 содержит элементы 0, 1 и 0, тогда как в ilist1 элемента 0 больше нет.

// ilist2.end() указывает на позицию, куда нужно переместить элемент.

// элементы вставляются перед этой позицией.

// ilist1 указывает на список, из которого перемещается элемент.

// ilist1.begin() указывает на сам перемещаемый элемент.

Ilis2.splice( ilist2.end(), ilist1, ilist1.begin() );

В следующем примере применения splice() передаются два итератора, ограничивающие диапазон перемещаемых элементов:

List int ::iterator first, last;

First = ilist1.find( 2 );

Last = ilist1.find( 13 );

Ilist2.splice( ilist2.begin(), ilist1, first, last );

В данном случае элементы 2, 3, 5 и 8 удаляются из ilist1 и вставляются в начало ilist2. Теперь ilist1 содержит пять элементов 1, 1, 13, 21 и 34. Для их перемещения в ilist2 можно воспользоваться третьей вариацией операции splice():

Listint ::iterator pos = ilist2.find( 5 );

Ilist2.splice( pos, ilist1 );

Итак, список ilist1 пуст. Последние пять элементов перемещены в позицию списка ilist2, предшествующую той, которую занимает элемент 5.