Writing your own random-access iterator
In the first chapter, we saw how we can enable range-based for loops for custom types by implementing iterators, as well as free
end() functions to return iterators to the first and one-past-the-last element of the custom range. You might have noticed that the minimal iterator implementation that we provided in that recipe does not meet the requirements for a standard iterator. This is because it cannot be copy constructible or assigned and cannot be incremented. In this recipe, we will build upon that example and show you how to create a random-access iterator that meets all requirements.
For this recipe, you should know the types of iterators the standard defines and how they are different. A good overview of their requirements is available at http://www.cplusplus.com/reference/iterator/.
To exemplify how to write a random access iterator, we will consider a variant of the
dummy_array class used in...