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

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.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Список (List)

Из книги Руководство по стандартной библиотеке шаблонов (STL) автора Ли Менг

Список (List) list - вид последовательности, которая поддерживает двунаправленные итераторы и позволяет операции вставки и стирания с постоянным временем в любом месте последовательности, с управлением памятью, обрабатываемым автоматически. В отличие от векторов и


Тип List‹T›

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю


3.2.2. LIST Partitioning

Из книги MySQL: руководство профессионала автора Паутов Алексей В


Создание списка:

Из книги Ubuntu 10. Краткое руководство пользователя автора Колисниченко Д. Н.

Создание списка: <fo:list-block> Для начала воспользуйтесь элементом <fo:list-block>, чтобы создать список XSL-FO; этот объект содержит элементы <fo:list-item>, содержащие данные списка.С элементом <fo:list-block> можно применять следующие свойства:• общие свойства доступа: source-document,


Создание элементов списка:

Из книги C++ для начинающих автора Липпман Стенли

Создание элементов списка: <fo:list-item> Затем при помощи элемента <fo:list-item> нужно поместить в список метку и тело элемента списка. В каждом элементе списка должен присутствовать один из этих объектов.С элементом <fo:list-item> можно применять следующие свойства:• общие


Создание меток элемента списка:

Из книги автора

Создание меток элемента списка: <fo:list-item-label> Метка для элемента списка создается элементом <fo:list-item-label>, при помощи которого можно перенумеровать или пометить дело элемента списка.К элементу <fo:list-item-label> можно применять следующие свойства:• общие свойства


Создание тел элементов списка:

Из книги автора

Создание тел элементов списка: <fo:list-item-body> Для включения тела элемента списка служит элемент <fo:list-item-body>. Заметьте, что для форматирования тела элемента списка требуемым вам образом вы можете включить в элемент <fo:list-item-body> объект <fo:block>.С элементом


9.3.1. Файл /etc/apt/sources.list и репозитории пакетов

Из книги автора

9.3.1. Файл /etc/apt/sources.list и репозитории пакетов Откройте файл /etc/apt/sources.list (рис. 9.2): gksudo gedit /etc/apt/sources.list Найдите и раскомментируйте следующую строку: deb http://ru.archive.ubuntu.com/ubuntu/ lucid-backports main restricted universe multiverse Эта строка подключает репозиторий backports, содержащий много полезных


9.3.2. Графическая оболочка для редактирования файла /etc/apt/sources.list

Из книги автора

9.3.2. Графическая оболочка для редактирования файла /etc/apt/sources.list Лично мне удобнее редактировать файл /etc/apt/sources.list вручную, но вам, возможно, будет удобнее пользоваться для этого графической оболочкой, так что было бы несправедливо, если бы я не рассказал вам о ней. Для


12.6.2. Операция list::remove()

Из книги автора

12.6.2. Операция list::remove() void list::remove( const elemType &value );Операция remove() удаляет все элементы с заданным значением:ilist1.remove( 1


12.6.3. Операция list::remove_if()

Из книги автора

12.6.3. Операция list::remove_if() template class Predicate void list::remove_if( Predicate pred );Операция remove_if() удаляет все элементы, для которых выполняется указанное условие, т.е. предикат pred возвращает true. Например:class Even {public:bool operator()( int elem ) { return ! (elem % 2 ); }};ilist1.remove_if( Even() );удаляет все четные числа из списка,


12.6.4. Операция list::reverse()

Из книги автора

12.6.4. Операция list::reverse() void list::reverse();Операция reverse() изменяет порядок следования элементов списка на


12.6.5. Операция list::sort()

Из книги автора

12.6.5. Операция list::sort() void list::sort();template class Comparevoid list::sort( Compare comp );По умолчанию sort() упорядочивает элементы списка по возрастанию с помощью оператора "меньше", определенного в классе элементов контейнера. Вместо этого можно явно передать в качестве аргумента оператор


12.6.7. Операция list::unique()

Из книги автора

12.6.7. Операция list::unique() void list::unique();template class BinaryPredicatevoid list::unique( BinaryPredicate pred );Операция unique() удаляет соседние дубликаты. По умолчанию при сравнении используется оператор равенства, определенный для типа элементов контейнера. Например, если даны значения {0,2,4,6,4,2,0}, то после