逆イテレータは、有効な(およびそれぞれ)基本イテレータを使用して表現する必要がbase
あるため、1つの要素のオフセットを持つイテレータに「対応」します。たとえば、コンテナのイテレータの前を「指す」インターレータで表すことはできませんが、論理的にはそれを表します。したがって、's'ベースイテレータ'はです。したがって、の基本イテレータはになります。逆イテレータは、間接参照されるときに(または演算子を使用して)そのオフセットを自動的に調整します。rbegin()
rend()
end()
begin()
rend()
begin()
rend()
begin()
rbegin()
end()
*
->
スコットマイヤーズによる古い記事は、素敵な写真と一緒に関係を詳細に説明しています:
ガイドライン3:reverse_iteratorのベースイテレータの使用方法を理解する
reverse_iteratorで基本メンバー関数を呼び出すと、「対応する」イテレータが生成されますが、それが何を意味するのかは明確ではありません。例として、このコードを見てください。このコードは、1〜5の数値をベクトルに入れ、reverse_iteratorを3を指すように設定し、イテレーターをreverse_iteratorのベースに設定します。
vector<int> v;
// put 1-5 in the vector
for (int i = 1; i <= 5; ++i) {
v.push_back(i);
}
// make ri point to the 3
vector<int>::reverse_iterator ri =
find(v.rbegin(), v.rend(), 3);
// make i the same as ri's base
vector<int>::iterator i(ri.base());
このコードを実行すると、次のようになります。

この画像は素晴らしいです。begin()とend()に関してrbegin()とrend()のオフセットを模倣するreverse_iteratorとそれに対応するベースイテレータの特徴的なオフセットを表示していますが、必要なものがすべて揃っているわけではありません。知るために。特に、iを使用してriで実行したい操作を実行する方法については説明していません。