The **LegacyIterator** requirements describe types that can be used to identify and traverse the elements of a container.

LegacyIterator is the base set of requirements used by other iterator types: LegacyInputIterator, LegacyOutputIterator, LegacyForwardIterator, LegacyBidirectionalIterator, and LegacyRandomAccessIterator. Iterators can be thought of as an abstraction of pointers.

All the categories of iterators require only those functions that are realizable for a given category in constant time (amortized). Therefore, requirement tables and concept definitions (since C++20)for the iterators do not specify complexity.

The type `It`

satisfies LegacyIterator if.

- The type
`It`

satisfies CopyConstructible, and - The type
`It`

satisfies CopyAssignable, and - The type
`It`

satisfies Destructible, and - lvalues of type
`It`

satisfy Swappable, and -
`std::iterator_traits<It>`

has member typedefs`value_type`

(until C++20),`difference_type`

,`reference`

,`pointer`

, and`iterator_category`

, and - Given
`r`

, an lvalue of type`It`

, the following expressions must be valid and have their specified effects:

Expression | Return Type | Precondition |
---|---|---|

`*r` | unspecified |
`r` is dereferenceable |

`++r` |
`It&` |
`r` is incrementable (the behavior of the expression `++r` is defined) |

## ConceptFor the definition of
where the exposition-only concept | (since C++20) |

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|

LWG 3420 | C++20 | the exposition-only concept checks `copyable` first | `copyable` is checked only if the requires-expression yields true |

(C++20) | specifies that objects of a type can be incremented and dereferenced (concept) |

Iterator library | provides definitions for iterators, iterator traits, adaptors, and utility functions |

© cppreference.com

Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.

https://en.cppreference.com/w/cpp/named_req/Iterator