#include <iostream>
template <typename T>
struct RIterator {
RIterator(T *_data, size_t _size)
: data(_data), size(_size),
position(_data + _size - 1) {}
/* Iterator starts at end of array */
void operator++()
{
--position;
}
void operator--()
{
++position;
}
bool at_end() { return (position == data) ? true : false; }
T *get_data() { return position; }
private:
T *data;
size_t size;
T *position;
};
int main()
{
const char bob[] = "abcdefg";
RIterator<const char> iterator(bob, sizeof(bob) / sizeof(bob[0]));
for (; !iterator.at_end(); ++iterator) {
std::cout << "Current Element: " << iterator.get_data()[0] << std::endl;
}
std::cout << "Current Element: " << iterator.get_data()[0] << std::endl;
}