Последовательные итераторы (Forward iterators)
Класс или встроенный тип X удовлетворяет требованиям последовательного итератора, если справедливы следующие выражения:
выражение | возвращаемый тип | семантика исполнения | утверждение/примечание состояние до/после |
| |||
X u; | . | . | примечание: u может иметь исключительное значение. примечание: предполагается деструктор. |
X() | . | . | примечание: X() может быть исключительным. |
X(a); | . | . | a == X(a) |
X u(a); X u = a; |
. | X u; u = a; | после: u == a. |
a == b | обратимый в bool | . | == - это отношение эквивалентности. |
a != b | обратимый в bool | !(a == b) | . |
r = a | X& | . | после: r == a. |
*a | обратимый в T | . | до: a - разыменовываемое. a == b подразумевает *a == *b. Если X - модифицируемый, то *a = t - допустимо. |
++r | X& | . | до: r - разыменовываемое. после: r - разыменовываемое или r - законечное. r == s и r - разыменовываемое подразумевает ++r == ++s. &r == &++r. |
r++ | X | { X tmp = r; ++ r; return tmp; } |
. |
ПРИМЕЧАНИЕ. Тот факт, что r == s подразумевает ++r == ++s (что неверно для итераторов ввода и вывода) и что удалено ограничение на число присваиваний через итератор (которое применяется к итераторам вывода), позволяет использование многопроходных однонаправленных алгоритмов с последовательными итераторами.