A class or pointer type X satisfies the requirements of a random access iterator if, in addition to satisfying the requirements for bidirectional iterators, the following expressions are valid as shown in Table [tab:iterator.random.access.requirements].

Table 111 — Random access iterator requirements (in addition to bidirectional iterator)

Expression | Return type | Operational | Assertion/note |

semantics | pre-/post-condition | ||

r += n | X& |
{ difference_type 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 | difference_type | return n |
pre: there exists a value n of type difference_type such that a + n == b. b == a + (b - a). |

a[n] | convertible to reference | *(a + n) | |

a < b | contextually convertible to bool | b - a > 0 | < is a total ordering relation |

a > b | contextually convertible to bool | b < a | > is a total ordering relation opposite to <. |

a >= b | contextually convertible to bool | !(a < b) | |

a <= b | contextually convertible to bool. | !(a > b) |