x と等しくないデータを見つけて印字

container と x を渡して、x と等しくないデータを見つけて印字します。

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

プログラムの説明

  1. container から x と等しくないデータを見つけて印字するアルゴリズム find_not() を作成します。
    find_not() 関数を呼び出す main() プログラムです。
    vector<int> v に int t[] の値を格納して find_not(v, 3); で呼び出します。
    /*★ Algorithm  Step1    前田  稔 ★*/
    #include <iostream>
    #include <vector>
    using namespace std;
    
    void main()
    {
        int t[] = { 3, 3, 3, 3, 3, 3, 7, 3, 3, 3 };
        vector<int> v(t, t+10);
    
        // vector v[]から3でない要素を見つける
        find_not(v, 3);
    }
    
  2. container に格納されているデータの中から x と等しくないデータを見つけて印字する find_not() 関数です。
    <class Container, class T> が呼び出し側から渡される型で Container と T で受け取ります。
    Container と T は一般的に使われている名前で、キーワードではありません。
    void は関数の型(戻り値)です。
    find_not(const Container& c, const T& x) で呼び出し側から渡されたパラメータを受け取ります。
    main() から find_not(v, 3); が呼び出されると、c には v が、x には 3 が格納されます。
    c.begin() から c.end() までループしながら container の中を検索します。
    x と等しくないデータが見つかったときは first != c.end() になっています。
    template<class Container, class T>
    void
    find_not(const Container& c, const T& x)
    {   Container::const_iterator first = c.begin();
        while(first != c.end() && *first == x)  ++first;
        if (first != c.end())   cout << "見つかった! " << *first << endl;
        else    cout << x << "以外は見つからなかった!" << endl;
    }
    

【演習】

  1. 次に list に格納して find_not() を呼び出します。
        int t[] = { 3, 3, 3, 3, 7, 3, 3, 5, 3, 3 };
        list<int> lst(t,t+10);
    
        // list lst[]から3でない要素を見つける
        find_not(lst, 3);
        
  2. begin(); や end(); を使っているので、配列には対応していないことを確認して下さい。
        int t[] = { 3, 3, 3, 3, 3, 3, 7, 3, 3, 3 };
    
        // int t[]から3でない要素を見つける
        find_not(t, 3);
        

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