逆順のイテレータ

さて今までvector、list、set等色々なコンテナの勉強をしてきたわけですが、全ての値にアクセスする手段としてイテレータを使ってきました。

このイテレータなんですが、実は逆順でループさせることも可能なのです。

さっそくやってみます。例としてvectorクラスで試します。

#include <iostream>
#include <vector>
using namespace std;

int main () {
    vector<int> data;
    
    data.push_back(100);
    data.push_back(200);
    data.push_back(300);
    
    vector<int>::reverse_iterator it = data.rbegin();
    
    while( it != data.rend() ) {
        cout << *it << endl;
        it++;
    }
}
$ main
300
200
100

逆順で表示されてますね。

普通のイテレータを3つ違いがあります。

まず開始位置を取得する関数がbegin関数からrbegin関数に変わっています。同様にend関数もrend関数に変わります。

そしてイテレータの型がiteratorからreverse_iteratorに変わっています。

これだけですね。

後は普通のiteratorと同じようにループでrendと判定しながらitをインクリメントしていくだけでOKです。