カスタム コンテナ クラスと定義済みのイテレータがあるので、次の操作を実行できます。
for (auto i : c)
しかし、逆方向に反復するものはありますか?
何かのようなもの:
for_reverse (auto i : c)
ベストアンサー1
ブーストを使用できます:
#include <boost/range/adaptor/reversed.hpp> using namespace boost::adaptors; for (auto i : c | reversed) ...
または、演算子のオーバーロードが気に入らない場合は、次のようにします。
#include <boost/range/adaptor/reversed.hpp> using namespace boost::adaptors; for (auto i : reverse(c)) ...
同様のヘルパー関数を定義するには、std::reverse_iteratorブーストに依存しないようにします。
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))); }
次のように記述できます。
for (auto i : reverse(c)) ...