C++ iterator adapter created from two iterators (begin, end) that jumps to begin when end is reached.
Works with C++11 and onward.
#include <idv/cyclic_iterator.h>
#include <cassert>
#include <vector>
int main()
{
auto v = std::vector<int>{1, 2, 3};
auto it = idv::cyclic_iterator(v.begin(), v.end());
auto x1 = *it++; // 1
auto x2 = *it++; // 2
auto x3 = *it++; // 3
auto x4 = *it++; // 1
assert(x1 == x4); // true
return 0;
}cyclic_iterator requires base iterator to be at least ForwardIterator since its semantics assume multipass guarantee.
It is implemented for every suitable iterator category and inherits the category (and operations) of base iterator.
The simplest way is to copy include/idv/cyclic_iterator.h into the project and #include it.
Another way is to use it as a submodule.
add_subdirectory(cyclic_iterator)
target_link_libraries(<target-name> cyclic_iterator)