私は質問を誤解しているかもしれませんが、あなたはただ必要ですか:
while (begin != end) {
--end;
// do something with *end
}
逆方向のイテレータが必要な場合は、ipc の回答でそれが得られます。
実際には、vector
おそらく を回避できますがwhile (begin != end--)
、誘惑されないでください。イテレータがベクトルの先頭にある場合 (つまり、 の結果と等しい場合vector::begin()
) にイテレータをデクリメントするのは、未定義の動作です。
このコードには、少なくとも BidirectionalIterator が必要です。幸いなことに、vector
さらに優れた RandomAccessIterator があります。
本当に ForwardIterator しかない場合は、範囲を反復処理し、反復子の値をどこかに ( a のようにstack
) 格納してから、それらを逆の順序で使用する必要があります。
std::stack<Foo::const_iterator> iterators;
while (begin != end) {
iterators.push(begin);
++begin;
}
while (!iterators.empty()) {
Foo::const_iterator i = iterators.top();
// do something with *i
iterators.pop();
}
このコードには、少なくとも ForwardIterator が必要です (単なる InputIterator では機能しません)。