イテレータで複数分先に進める(or戻る)方法
通常イテレータでは++演算子を用いて一つ進めたりすることができます。
vector<int>::iterator it = data.begin(); // ひとつ進める ++it;
では二つ以上進めたい場合どうするか?
// 二つ進める
++it;
++it;
とすればできますよね、当たり前の話です。でもこれが5つ進めたいとしたら?あるいは100進めたいとしたら?++演算子だけではちょっと面倒です。
そこで+=演算子が使えるのではないかと試してみました。
#include <iostream> #include <vector> using namespace std; int main () { vector<int> data; for(int i=0;i<100;++i) { data.push_back(i); } vector<int>::iterator it = data.begin(); // 5つ進める it+=5; cout << *it << endl; return 0; }
$ main 5
ビンゴですね。
またiteratorヘッダに用意されているadvance関数を使ってイテレータを進めることもできます。
// 5つ進める advance(it,5);