На этом шаге мы рассмотрим функции, осуществляющие вставку элементов.
Как отмечалось на предыдущих шагах, одним из достоинств связанных списков является возможность удаления и вставки элементов в произвольной позиции с постоянным временем. При перемещении элементов из одного контейнера в другой это достоинство проявляется еще сильнее, потому что операция выполняется переназначением нескольких внутренних указателей (рисунок 1).
Рис.1. Операции врезки изменяют порядок следования элементов списка
Для обеспечения этой возможности спискам необходимы дополнительные модифицирующие функции, которые бы изменяли порядок следования и производили повторное связывание ссылок на элементы и интервалы. При помощи этих функций можно перемещать элементы как внутри одного списка, так и между разными списками (при условии, что эти списки имеют одинаковый тип). Перечень таких функций приводится в таблице 1, а пример - на шаге 156.
Операция | Описание |
---|---|
c.unique() | Удаляет дубликаты (элементы с одинаковыми значениями) |
c.unique(op) | Удаляет дубликаты (элементы с одинаковыми значениями), для которых ор возвращает true |
c1.splice(pos,c2) | Перемещает все элементы с2 в c1 перед позицией итератора pos |
c1.splice(pos,c2,c2pos) | Перемещает все элементы с2, начиная с позиции итератора c2pos, в список c1 перед позицией итератора pos |
c1.splice(pos,c2,c2beg,c2end) | Перемещает все элементы интервала [c2beg,c2end) списка с2 перед позицией итератора pos в список с1 (с1 и с2 могут совпадать) |
c.sort() | Сортирует все элементы оператором < |
c.sort(op) | Сортирует все элементы по критерию ор |
с1.merge(c2) | Перемещает все элементы с2 в c1 с сохранением сортировки (предполагается, что оба контейнера содержат отсортированные элементы) |
c1.merge(c2,op) | Перемещает все элементы c2 в c1 с сохранением сортировки по ор() (предполагается, что оба контейнера содержат элементы, отсортированные по критерию ор()) |
c.reverse() | Переставляет все элементы в обратном порядке |
На следующем шаге мы рассмотрим обработку исключений.