Тип класса или указателя X удовлетворяет требованиям прямого итератора, если
X удовлетворяет требованиям input iterator,
X удовлетворяет DefaultConstructible requirements,
если X изменяемый итератор, reference это ссылка на T; если X постоянный итератор, reference это ссылка на const T,
выражения в таблице 97 действительны и имеют указанную семантику, и
объекты типа X предлагают многопроходную гарантию, описанную ниже.
Область == прямых итераторов - это область итераторов той же базовой последовательности. Однако итераторы с инициализацией значения могут сравниваться и должны сравниваться наравне с другими итераторами с инициализацией значения того же типа. [ Note: Итераторы с инициализацией значения ведут себя так, как если бы они ссылались на конец одной и той же пустой последовательности. ] — end note
Два разыменяемых итератора a и b типа X предлагают multi-pass guarantee if:
a == b подразумевает ++a == ++b и
X является типом указателя или выражение (void)++X(a), *a эквивалентно выражению *a.
[ Note: Требование, которое a == b подразумевает ++a == ++b (что неверно для итераторов ввода и вывода) и снятие ограничений на количество назначений через изменяемый итератор (которое применяется к итераторам вывода), позволяет использовать многопроходные однонаправленные алгоритмы с прямыми итераторами. ] — end note
Выражение | Тип возврата | Оперативный | Утверждение / примечание |
семантика | до / после состояния | ||
r++ | конвертируемый в const X& |
{ X tmp = r; ++r; return tmp; } | |
*r++ | reference |