iterator の説明

データの印字に iterator を使ってループします。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. iterator(イテレータ)は cell を指し示すポインタです。
    Vector を印字する disp() 関数で iterator を使ってループしながら印字します。
    Vector Class を定義した Vector.h ファイルは前回と同じです。
  2. Vector をテストする Main Program(VectorTest.cpp)です。
    "Vector.h" をインクルードします。
    Vector<int> v1; で Vector Class を定義して、0~9の順に10件のデータを登録します。
    disp( &v1 ) 関数で登録されたデータを印字します。
    /*★ Main Program  Step4    前田  稔 ★*/
    #include <iostream>
    #include "Vector.h"
    using namespace std;
    
    void main()
    {   int i;
        Vector<int> v1;
    
        for(i= 0; i<10; i++)    v1.push_back(i);
        // 表示
        cout << "v1  ";
        disp( &v1 );
    }
    
  3. disp( Vector<int>* v ) 関数にはパラメータとして Vector Class のポインタが渡されます。
    v->begin() は Vector の先頭 cell への iterator(ポインタ)です。
    v->end() は Vector の「最後の cell+1」への iterator(ポインタ)です。
    Vector では cell の領域は連続しているので、iterator をインクリメント(++)すると次の cell をポイントします。
    同様に iterator をデクリメント(--)すると一つ前の cell をポイントします。
    list コンテナなどでは領域が連続していないので、単純にインクリメント/デクリメントすることは出来ません。
    連鎖されている場合は iterator への演算子をオーバーロードして、次の cell をポイントするように Container を作成しなければなりません。
    List 構造の説明は List 連鎖の基礎 を参照して下さい。
  4. iterator は次のように定義します。
    Vector<int>::iterator it;
    iterator it に cell の先頭を格納するコードは次のようになります。
    it= v->begin();
    今回 Vector に格納するのは int 型なので、返される iterator は int 型のポインタになります。
    従って、次のようにプログラムすることも出来ます。
    但し、直接代入するとエラーが表示されるかも知れません。
    int *it;
    it= v->begin();
  5. ポインタはメモリ領域のアドレスなので大小比較は出来ないので注意して下さい。
    それでは disp() 関数をコーディングしてプログラムを完成させて下さい。
    void disp( Vector<int>* v )
    {
        Vector<int>::iterator it;
        //iterator を使ってループしながら印字して下さい。
    }
    

【演習】

Vector を Reference(参照)で受けて下さい。
ポインタで受けるより Reference の方が使いやすいかも知れません。
Reference の説明は 引数を reference で受け取る を参照して下さい。
void disp( Vector<int>& v )
{
    Vector<int>::iterator it;
    //iterator を使ってループしながら印字して下さい。
}

超初心者のプログラム入門(C/C++)