#ifndef Ring3_H #define Ring3_H #include "cycle_facade.H" #include template class CONT=std::vector> class Ring { public: typedef typename boost::cycle_facade::iterator> iterator; typedef typename boost::cycle_facade::const_iterator> const_iterator; Ring() : _size(0) {} explicit Ring (size_t n) : _size (n), v (n+1), it (boost::make_cycle_facade (v.begin(), v.begin(), v.end())) {} iterator begin() { return it; } iterator end() { return it + _size; } const iterator begin() const { return it; } const iterator end() const { return it + _size; } void shift (int n) { it += n; } T& operator[] (int n) { return it[n]; } const T& operator[] (int n) const { return it[n]; } size_t size() const { return _size; } void resize (size_t n) { v.resize (n+1); _size = n; it = boost::make_cycle_facade (v.begin(), v.begin(), v.end()); } size_t _size; CONT v; iterator it; }; #endif