-
You can use boost:
#include <boost/range/adaptor/reversed.hpp> using namespace boost::adaptors; for (auto i : c | reversed) ...Or if you don’t like operator overloading:
#include <boost/range/adaptor/reversed.hpp> using namespace boost::adaptors; for (auto i : reverse(c)) ... -
You can define a similar helper function using std::reverse_iterator so you don’t depend on boost:
template<typename It> class Range { It b, e; public: Range(It b, It e) : b(b), e(e) {} It begin() const { return b; } It end() const { return e; } }; template<typename ORange, typename OIt = decltype(std::begin(std::declval<ORange>())), typename It = std::reverse_iterator<OIt>> Range<It> reverse(ORange && originalRange) { return Range<It>(It(std::end(originalRange)), It(std::begin(originalRange))); }Then you can write:
for (auto i : reverse(c)) ...Example