| cppreference.com -> C++ イテレータ |
イテレータはポインタと同じような文法でコンテナの要素にアクセスする手段を提供する。例えば、vectorに格納された要素をすべて走査する、というようなことができる。いくつかの種類のイテレータがある:
| イテレータ | 説明 |
|---|---|
| input_iterator | 前方に移動しながら値を読むことができるイテレータ。インクリメント(ポインタを前方に進める)、比較、参照はずしができる |
| output_iterator | 前方に移動しながら値を書き込むことができるイテレータ。インクリメントと参照はずしができる |
| forward_iterator | 前方に移動しながら値の読み書きができる。これはinput_iteratorとoutput_iteratorを合体させ、値書き込み機能を追加したものである |
| bidirectional_iterator | 前方、後方への移動、値の読み書きができるイテレータ。これはforward_iteratorに似ているが、さらにデクリメント(ポインタを後方に進める)ようにしたものである |
| random_iterator | 値の読み書きとランダムアクセスが可能なポインタ。一番強力なポインタである。これはbidirectional_iteratorにポインタ演算機能とポインタ比較機能を追加したものである |
| reverse_iterator | random_iteratorやbidirectional_iteratorのような、後方に進むことができるイテレータである |
コンテナクラスのイテレータはこれらのどれかの種類に属す。また、STLのアルゴリズムのうちのいくつかは特定の種類のイテレータに対して使用することができる。例えば、vectorのイテレータはrandom_iteratorに属しているので、イテレータのランダムアクセスを必要とするアルゴリズムを使用することができる。random_iteratorは他のイテレータのすべての機能を兼ね備えているので、vectorには他のイテレータ用に作られたアルゴリズムであっても使用することができる。
以下のサンプルコードはvectorのイテレータを作成して使用している:
vector<int> the_vector;
vector<int>::iterator the_iterator;
for( int i=0; i < 10; i++ )
the_vector.push_back(i);
int total = 0;
the_iterator = the_vector.begin();
while( the_iterator != the_vector.end() ) {
total += *the_iterator;
the_iterator++;
}
cout << "Total=" << total << endl;
イテレータが指すコンテナの要素にアクセスするためには参照はずし(*演算子)を利用する。