In the first chapter, we saw how we can enable range-based for loops for custom types by implementing iterators and free begin() and 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 because it cannot be copy constructible or assigned and cannot be incremented. In this recipe, we will build upon that example and show how to create a random access iterator that meets all requirements.
Writing your own random access iterator
Getting ready
For this recipe, you should know the types of iterators the standard defines and how they are different. A good overview...