C++ named requirements: LegacyBidirectionalIterator
LegacyBidirectionalIterator — это LegacyForwardIterator , который может перемещаться в обоих направлениях (то есть инкрементироваться и декрементироваться).
Если
LegacyBidirectionalIterator
it
происходит из
Container
, тогда
it
's
value_type
совпадает с контейнерным, поэтому разыменование (
*
it
) возвращает
value_type
контейнера.
Содержание |
Требования
Тип
It
удовлетворяет требованиям
LegacyBidirectionalIterator
если
-
Тип
Itудовлетворяет требованиям LegacyForwardIterator
И, учитывая
-
a
и
b
, lvalue типа
It -
reference, тип, обозначаемый std:: iterator_traits < It > :: reference
Следующие выражения должны быть корректными и иметь указанные эффекты:
| Выражение | Возвращаемое значение | Эквивалентное выражение | Примечания |
|---|---|---|---|
| -- a |
It&
|
Предусловия:
Постусловия:
|
|
| a -- | преобразуемо в const It & |
It temp
=
a
;
--
a
;
|
|
| * a -- |
reference
|
Изменяемый LegacyBidirectionalIterator — это LegacyBidirectionalIterator , который дополнительно удовлетворяет требованиям LegacyOutputIterator .
Примечания
Начальный итератор не может быть декрементирован, и поведение не определено, если -- container. begin ( ) вычисляется.
Двунаправленный итератор не обязательно должен быть разыменовываемым, чтобы быть декрементируемым (в частности, конечный итератор не разыменовывается, но может быть декрементирован).
КонцептДля определения std::iterator_traits определён следующий исключительно демонстрационный концепт.
где исключительно демонстрационный концепт
|
(начиная с C++20) |
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
|
LWG 299
( N3066 ) |
C++98 |
возвращаемый тип
*
a
--
должен был быть
преобразуемым к
T
|
изменен возвращаемый
тип на
reference
[1]
|
| LWG 383 | C++98 | b должен был быть разыменовываемым после -- a | a должен быть разыменовываемым вместо этого |
|
LWG 1212
( N3066 ) |
C++98 |
возвращаемый тип
*
a
--
не соответствовал возвращаемому
типу * a ++ требуемому LegacyForwardIterator |
изменен возвращаемый
тип на
reference
|
- ↑ Данная проблема изначально была решена с помощью N2758 (концепты итераторов), который позже был исключен из стандарта C++.
Смотрите также
|
(C++20)
|
определяет, что
forward_iterator
является двунаправленным итератором, поддерживающим движение назад
(концепт) |
| Библиотека итераторов | предоставляет определения для итераторов, характеристик итераторов, адаптеров и служебных функций |