vectorは、C言語の配列を拡張したものであるため、イタレーターを使用せずとも[]演算子や、
at関数を使用すれば、配列として使用できることはおわかりいただけたと思います。
しかし数多く用意されているアルゴリズムを使用するためにはイタレーターが必要になってきます。
そこでイタレーターについて少し説明します。
イタレーターはポインタのようなものだと説明しました。ポインタは
char* p = "abcdefg";
p++; // (1)ポインタを1つ進める
p--; // (2)ポインタを1つ戻す
p+=5; // (3)ポインタを5つ進める
p-=5; // (4)ポインタを5つ戻す
*p = 'A'; // (5)ポインタの指す内容を書き換える
char ch = *p // (6) ポインタの指す内容を取得する
|
のようにポインタを進めたり、戻したり、内容を参照したりできます。
イタレーターでは、これらすべてが可能なイタレーターとそうではないものに分けられ、どんな機能を
有するイタレーターなのかで、5種類に分類できます。
名 称 |
機 能 |
入力イタレーター |
(1)ポインタを一つ進める (6)ポインタの指す内容を取得する |
出力イタレーター |
(1)ポインタを一つ進める (5)ポインタの指す内容を書き換える |
前方イタレーター |
(1)ポインタを一つ進める (5)ポインタの指す内容を書き換える (6)ポインタの指す内容を取得する |
双方向イタレーター |
(1)ポインタを一つ進める (2)ポインタを1つ戻す (5)ポインタの指す内容を書き換える (6)ポインタの指す内容を取得する |
ランダムアクセスイタレーター |
(1)ポインタを一つ進める (2)ポインタを1つ戻す (3)ポインタをn個進める (4)ポインタをn個戻す (5)ポインタの指す内容を書き換える (6)ポインタの指す内容を取得する |
そして、使用するコンテナによってはどのイタレーターを使用できるかに制限があります。
例えば、すでに紹介したvectorでは、ランダムアクセスイタレーターを
使用できますが、これから紹介するlistでは、双方向イタレーターしか
使用することができません。
さらに、アルゴリムを使用するためにも、制限があります。ソートを行うsort()というアルゴリズムを
使用するためにはランダムアクセスイタレーターが必要です。したがって、listコンテナでは
アルゴリズムのsort()を使用することができません。(ただし、listクラスのメンバー関数として
sort()が定義されているので、そちらを使用すれば、ソートが可能)