基本
逆方向に進むiterator。rbeginはend - 1と同じ場所を指す。rendはbegin - 1と同じ場所を指す。
上の説明を理解するための簡単なサンプル。
#include <iostream> #include <vector> using namespace std; int main(int argc, char **argv) { vector<int> v{1,2,3,4,5,6,7,8}; for (auto itr = v.rbegin(); itr != v.rend(); itr++) { cout << *itr << endl; } return 0; }実行すると、
8
7
6
5
4
3
2
1
と表示される。v.rbegin()はv.end()-1の場所を指しており、v.rend()はv.begin()-1の場所を指していることが分かる。また、reverse_iteratorは名前の通り逆向きに進むことが分かる。
これだけだと何が嬉しいか分からないので、以下に便利な使い方を示す。
逆順ソート
vectorを逆順にソートしたいときに、reverse_iteratorを使うと短く書ける。
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(int argc, char **argv) { vector<int> v{1,3,5,7,2,4,6,8}; // functorを使って書くこともできるが、 sort(v.begin(), v.end(), greater<int>()); // reverse_iteratorを使うと、短く書ける sort(v.rbegin(), v.rend()); return 0; }
setの最小値、最大値
beginで最小値、rbeginで最大値を取得出来る。
#include <iostream> #include <set> using namespace std; int main(int argc, char **argv) { set<int> s{3,2,1,4,8,7,6,5}; cout << "min = " << *s.begin() << endl; cout << "max = " << *s.rbegin() << endl; return 0; }