Последовательности (Sequences)
Последовательность - это вид контейнера, который организует конечное множество объектов одного и того же типа в строгом линейном порядке. Библиотека обеспечивает три основных вида последовательных контейнеров: vector (вектор), list (список) и deque (двусторонняя очередь). Она также предоставляет контейнерные адаптеры, которые облегчают создание абстрактных типов данных, таких как стеки или очереди, из основных видов последовательностей (или из других видов последовательностей, которые пользователь может сам определить).
В следующих двух таблицах X - последовательный класс, a - значение X, i и j удовлетворяют требованиям итераторов ввода, [i, j) - допустимый диапазон, n - значение X::size_type, p - допустимый итератор для a, q - разыменовываемый итератор для a, [ql, q2) - допустимый диапазон в a, t - значение X::value_type.
Сложности выражений зависят от последовательностей.
выражение | возвращаемый тип | утверждение/примечание состояние до/после |
X(n, t) X a(n, t); | . | после: size() == n. создаёт последовательность с n копиями t. |
X(i, j) X a(i, j); |
. | после: size() == расстоянию между i и j. создаёт последовательность, равную диапазону [i, j). |
a.insert(p, t) | iterator | вставляет копию t перед p. возвращаемое значение указывает на вставленную копию. |
a.insert(p, n, t) | результат не используется | вставляет n копий t перед p. |
a.insert(p, i, j) | результат не используется | вставляет копии элементов из диапазона [i, j) перед p. |
a.erase(q) | результат не используется | удаляет элемент, указываемый q. |
a.erase(ql, q2) | результат не используется | удаляет элементы в диапазоне [ql, q2). |
vector (вектор), list (список) и deque (двусторонняя очередь) выдвигают программисту различные предложения сложности и должны использоваться соответственно. vectоr - тип последовательности, которая используется по умолчанию.
list нужно использовать, когда имеются частые вставки и удаления из середины последовательности, deque - структура данных для выбора, когда большинство вставок и удалений происходит в начале или в конце последовательности.
Типы iterator и const_iterator для последовательностей должны быть, по крайней мере, из категории последовательных итераторов.
выражение | возвращаемый тип | семантика исполнения | контейнер |
a.front() | reference; const_reference для постоянного a | *a.begin() | vector, list, deque |
a.back() | reference; const_reference для постоянного a |
*a.(--end()) | vector, list, deque |
a.push_front(t) | void | a.insert(a.begin(), t) | list, deque |
a.push_back(t) | void | a.insert(a.end(), t) | vector, list, deque |
a.pop_front () | void | a.erase(a.begin()) | list, deque |
a.pop_back () | void | a.erase(-- a.end()) | vector, list, deque |
a[n] | reference; const_reference для постоянного a |
*(a.begin() + n) | vector, deque |