Введение в стандартную библиотеку шаблонов C++. Описание, примеры использования, учебные задачи - страница 11




Теперь кратко опишем те новые виды контейнеров, которые появились в стандарте C++11.

Контейнер array является контейнерным аналогом массива фиксированного размера. Его шаблон имеет вид: array, где T – это тип элементов, а N – число, задающее размер контейнера. Данный контейнер определен в заголовочном файле . Помимо конструктора без параметров контейнер array можно инициализировать с помощью списка инициализации. Все, кроме одной, функции-члены контейнера array аналогичны по своему назначению одноименным функциям-членам контейнера vector (можно сказать, что array – это контейнер vector без возможности вставки и удаления элементов). Перечислим эти функции-члены:

• функции, описанные в п. 1.2.3: begin и его константный вариант cbegin, empty, end и его константный вариант cend, max_size, rbegin и его константный вариант crbegin, rend и его константный вариант crend, size, swap;

• функции, описанные в п. 1.2.4: operator[], at, back, data, front.

Единственная функция-член, имеющаяся в контейнере array и при этом отсутствующая в контейнере vector, – это функция void fill(value), позволяющая заполнить существующий контейнер array одинаковыми значениями value.

Контейнер forward_list является контейнерной реализацией односвязного списка (в отличие от контейнера list, реализующего двусвязный список). Данный контейнер требует меньше памяти для хранения своих элементов, но при этом обладает и более ограниченным по сравнению со списком list набором возможностей. Его шаблон имеет вид: forward_list, где T – тип элементов списка. Контейнер определен в заголовочном файле . Контейнер forward_list имеет те же варианты конструктора и операции =, что и контейнер list.

Перечислим функции-члены, которые имеются у обеих реализаций списков – как list, так и forward_list – и выполняются аналогичным образом:

• функции, описанные в п. 1.2.3: begin и его константный вариант cbegin, clear, empty, end и его константный вариант cend, max_size, swap;

• функции, описанные в п. 1.2.4: assign, emplace_front, front, pop_front, push_front, resize;

• функции, описанные в п. 1.2.5: merge, remove, remove_if, reverse, sort, unique.

Обратите внимание на то, что у списка forward_list отсутствуют средства быстрого доступа к его конечному элементу, а также обратные итераторы и функция-член size.

Функции-члены, связанные со вставкой и удалением элементов списка forward_list, отличаются от аналогичных функций списка list тем, что в качестве параметра pos указывается не позиция вставляемого или удаляемого элемента, а позиция, предшествующая позиции вставляемого или удаляемого элемента (что обусловлено односвязностью списка forward_list). По этой причине все функции-члены, связанные со вставкой и удалением, снабжены в классе forward_list суффиксом «after»: insert_after, emplace_after, erase_after, splice_after. Назначение этих функций и смысл их параметров те же, что и для аналогичных функций-членов контейнера list без суффикса _after: insert, emplace, erase (см. п. 1.2.4) и splice (см. п. 1.3.5). Исключение составляет параметр pos, указывающий, как было отмечено выше, позицию, предшествующую позиции вставляемого или удаляемого элемента, а также параметр first для функции erase_after(first, last) и параметры pos_lst и first_lst для функций splice_after(pos, lst, pos_lst) и splice_after(pos, lst, first_lst, last_lst):