Последовательные итераторы (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 (что неверно для итераторов ввода и вывода) и что удалено ограничение на число присваиваний через итератор (которое применяется к итераторам вывода), позволяет использование многопроходных однонаправленных алгоритмов с последовательными итераторами.