Итераторы произвольного доступа (Random access iterators)
Класс или встроенный тип X удовлетворяет требованиям итераторов произвольного доступа, если к таблице, которая определяет двунаправленные итераторы, мы добавим следующие строки:
выражение | возвращаемый тип | семантика исполнения | утверждение/примечание состояние до/после |
| |||
r += n | X& | { Distance m = n; if(m >= 0) while(m--) ++r; else while(m++) --r; return r; } | . |
a + n n + a |
X | { X tmp = a; return tmp += n; } |
a + n == n + a. |
r -= n | X& | return r += -n; | . |
a - n | X | { X tmp = a; return tmp -= n; } |
. |
b - a | Distance | . | до: существует значение n типа Distance
такое, что a + n = b. b == a + (b - a). |
a[n] | обратимый в T | *(a + n) | . |
a < b | обратимый в bool | b - a > 0 | - это отношение полного упорядочения |
a > b | обратимый в bool | b < a | > - это отношение полного упорядочения, противоположное . |
a >= b | обратимый в bool | !(a < b) | . |
a | обратимый в bool | !(a > b) | . |