container のデータを印字-2

container(コンテナ)に格納されている全てのデータを begin()~end() で参照します。

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

プログラムの説明

  1. vector や list に対応する全てのデータを印字するアルゴリズム disp() を作成します。
    disp() 関数を呼び出す main() プログラムです。
    vector<int> v に9~0の値を格納して disp(v) を呼び出します。
    /*★ Algorithm  Step1    前田  稔 ★*/
    #include <iostream>
    #include <vector>
    using namespace std;
    
    void main()
    {
        int t[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
        vector<int> v(t, t+10);
        // vector v を表示
        cout << "vector v   ";
        disp(v);
    }
    
  2. container に格納されている全てのデータを印字する disp() 関数です。
    <class Container> が呼び出し側から渡される型で Container で受け取ります。
    void は関数の型(戻り値)です。
    disp(const Container& c) で呼び出し側から渡されたパラメータ(今回は v)を受け取ります。
    & が付けられているので Container& c は reference(参照)になります。
    first=c.begin(); で「コンテナの先頭 cell(データ)」への iterator(イテレータ)を取得します。
    first に格納された iterator は、実質的には cell(データ)を指し示すポインタです。
    first++ で次のデータにポインタを移動します。
    このとき vector は領域が連続しているので、単純にインクリメントすれば良いのですが、 list は cell(データ)が連鎖されているので、iterator に対する演算子をオーバーロードして、 連鎖をたどらなければなりません。
    演算子のオーバーロードは 演算子のオーバーロード を参照して下さい。
    c.end(); は「最後尾+1」の iterator です。
    ポインタは大小比較出来ないことに注意して下さい。
    first には iterator(実質的にはデータを指し示すポインタ)が格納されています。
    従って first を通じてデータにアクセスすることが出来ます。
    disp() を完成させてプログラムを実行してみて下さい。
    template<class Container>
    void
    disp(const Container& c)
    {
        for(Container::const_iterator first=c.begin(); first!=c.end(); first++)
            //★cellのデータを印字して下さい。
        cout << endl;
    }
    

【演習】

  1. 次に同じデータを list に格納して disp(lst) を呼び出します。
    disp() 関数で list container の実行を確認して下さい。
        int t[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
        list<int> lst(t,t+10);
        // list lst[] を表示
        cout << "list lst   ";
        disp(lst);
        
  2. int 型の配列を表示する disp(a); を追加してみて下さい。
    配列には begin(); や end(); が使えないのでエラーになります。
    コンテナと共に配列でも使えるようにすることは出来なのでしょうか。 (^_^;)
        int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        // int a[] を表示
        cout << "a[]   ";
        disp(a);
        

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