Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
template_metaprogramming_ru.docx
Скачиваний:
12
Добавлен:
01.07.2025
Размер:
774 Кб
Скачать
☆

(Двунаправленный итератор)

Описание:

Двунаправленный итератор – прямой итератор, который позволяет получить итератор на предыдущий элемент последовательности.

Специализация:

  • Forward Iterator (прямой итератор).

Определения:

Двунаправленный итератор декрементирован, если явялется итератором на предыдущий элемент, что возможно в случае корректности выражения:

prior<i>::type

Итератор, указывающий на первый элемент в последовательности не может быть декрементирован.

Требования к выражениям:

Дополняет требования, определенные для прямого итератора и должен выполнять следующие:

Выражение

Тип

Сложность

prior<i>::type

Двунаправленный итератор

Амортизированное постоянное время.

next<i>::type

Двунаправленный итератор

Амортизированное постоянное время.

i::category

Интегральная константа, преобразуемая к bidirectional_iterator_tag

Постоянное время.

Семантика выражений:

typedef prior<i>::type j;

Предусловие: i должен поддерживать операцию декреметнации.

Семантика: j – итератор, указывающий на предыдущий элемент в последовательности.

Постусловие: j может быть рвзыменован и инкрементирован.

Инварианты:

Для любых двунаправленных итераторов i и j всегда поддерживаются следующие инварианты:

  • Если i поддерживает операцию инкрементации, то следующее выражение не имеет эффекта:

prior< next<i>::type >::type

Аналогично, если i поддерживает операцию декрементации, то следующее выражение не имеет эффекта:

next< prior<i>::type >::type

Смотри также:

Iterators, Forward Iterator, Random Access Iterator, Bidirectional Sequence, prior

Random Access Iterator

(Итератор произвольного доступа)

Описание:

Итератор произвольного доступа - двунаправленный итератор, который обеспечивает гарантии постоянного времени перемещения итератора на

произвольное количество позиций вперед или назад, и для измерения расстояния до другого итератора в той же последовательности.

Специализация:

  • Bidirectional Iterator (двунаправленный итератор).

Требования к выражениям:

Дополняет требования, определенные для двунаправленного итератора и должен выполнять следующие:

Выражение

Тип

Сложность

prior<i>::type

Итератор произвольного доступа

Амортизированное постоянное время.

next<i>::type

Итератор произвольного доступа

Амортизированное постоянное время.

i::category

Интегральная константа, преобразуемая к random_access_iterator_tag

Постоянное время.

advance<i,n>::type

Итератор произвольного доступа

Амортизированное постоянное время.

distance<i,j>::type

Интегральная константа

Амортизированное постоянное время.

Семантика выражений:

typedef advance<i,n>::type j;

typedef distance<i,j>::type n;

Семантика: смотри спецификации для advance и distance.

Инварианты:

Для любых итераторов произвольного доступа i и j всегда поддерживаются следующие инварианты:

  • Если поддерживается выполнение выражения:

advance<i, n>::type

то следующее выражения не имеют эффекта:

advance< advance<i,n>::type, negate<n>::type>::type

Смотри также:

Iterators, Bidirectional Iterator, Random Access Sequence, advance, distance

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]