まず簡単な例として、vector内の要素をイタレーターを利用してすべて表示させるプログラムを紹介する。
#include <iostream>
// vectorを使えるようにする
#include<vector>
using namespace std;
// 長さ10のchar型vectorを作る
vector<char> vect(10);
//
// vectorの中身を表示する(イタレーター使用)
void disp1(){
vector<char>::iterator itr = vect.begin();
vector<char>::iterator itrEnd = vect.end();
cout << "vector ";
for( ; itr != itrEnd ; itr++ )
cout << *itr << " ">;
cout << endl;
}
//
// vectorの中身を表示する(at()関数使用)
void disp2(){
cout << "vector ";
for( int i = 0 ; i < vect.size() ; i++ )
cout << vect.at(i) << " ";
cout << endl;
}
int main(int argc, char* argv[]){
int i;
// vectorに文字を代入する
for( i = 0 ; i < 10 ; i++ )
vect.at( i ) = 'A'+i;
// vectorの中身を表示
disp1();
disp2();
return 0;
}
|
vector A B C D E F G H I J
vector A B C D E F G H I J
|
上記の例のように、ほとんどポインタと同じように使用することができる。つまり、
「itr++」や「itr--」で、イタレーターを1つ進めたり、戻したりできる。また、
「*itr」で、イタレーターが指すデータそのものを表わすことができる。
さらに「itr += 3」で3つ進めたり、「itr -= 3」で3つ戻したり、
「itr2 - itr1」のように、差を求めることもできる。
このようなポインタとほぼ同じことができるイタレーターを前ページで
紹介した「ランダムアクセスイタレーター」と言う。
listコンテナで採用されている「双方向イタレーター」では、差を求めたり、複数個進めたり戻したり
といったことはできない。つまり「itr += 3」、「itr -= 3」、「itr2 - itr1」
のような使い方はできない
さらに「前方イタレーター」では、イタレーターを戻すことができないので「itr--」が
使用できない。そして「出力イタレーター」では内容取得ができないため、「n = *itr」が
できないし、「入力イタレーター」では内容の書き換えができないため、「*itr = n」が
使用できない。