As mentioned, STL differentiates iterators by which categories they fulfill. This is achieved by defining the following five specific types in the iterator class:
- iterator_category, the category the iterator fulfills
- difference_type, the type used to store the distance between two iterators
- value_type, the value the iterator returns when dereferenced
- reference, the type used for referencing the value_type
- pointer, the type of pointer used for pointing to the value_type
For the IntIterator, the following types would be defined:
class IntIterator {public: ... using difference_type = int; using value_type = int; using reference = int&; using pointer = int*; using iterator_category = std::forward_iterator_tag; ...}
It might ...