逆順のイテレータ
さて今まで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です。