In this exercise I am using Visual Studio 2019 and a modified version of the std_lib_facilities header found here.
Chapter 20 // Exercise 19
Define a range-checked iterator for list (a bidirectional iterator).
For this one I decided to expand on the one I did for vector in the previous exercise. That one was a friend class of std::vector but what if I made it a stand-alone class that can act as random/bidirectional for just about any container?
You give CheckedIterator the parent type (like vector<int> or list<string>) and it deduces the type of the container based on the iterator using std::iterator_traits<It>::reference:
https://en.cppreference.com/w/cpp/iterator/iterator_traits
I left in the random-access methods like operator+= but had to slightly change how I do the range check so it would work for both vectors and lists.
No comments:
Post a Comment