STL vector

Windows10 のコンソールモードで STL vector<int> を返す関数を作成します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. C++ ストアアプリの文字列や配列は非力で、STL を使う方法がお勧めです。
    C# の ArrayList は強力ですが C++ にはこれに相当する API が無いので STL の vector を使います。
    STL の説明は 超初心者のプログラム入門(C/C++) から「STL(Standard Template Library)」を参照して下さい。
  2. 次のクイズを解くプログラムを作成します。
    1. ある長い数列があり、2倍すると最後尾の数字(8)が先頭に移動します。
    2. 元の数列(桁数は不明)
      ・・・・・・・・・8
      2倍すると
      8・・・・・・・・・
    3. 数列を求めて印字して下さい。
    4. STL vector を使った練習問題です。
  3. Visual Studio を起動して新規作成から [C++ コンソールアプリ]"Hello World" を選びます。
    コンパイルして実行するとコンソール画面に "Hello World!" が印字されます。
  4. ConsoleApplication1.cpp を修正してクイズを解くプログラムを作成します。
    func() 関数がクイズを解く関数で、std::vector<int> v; に解を求めて return で返します。
    C++ では後位参照をしなければ、プロトタイプ宣言を省略することが出来ます。
    main() ではこれを std::vector<int> vect; で受け取ります。
    vect には下位の桁から格納されているので、左右反転して印字します。
    #include <iostream>
    #include <vector>
    using namespace std;
    
    std::vector<int> func()
    {   std::vector<int> v;
        short   n,s,c;
        n= 8;
        s=c= 0;
        while(s!=8)
        {   v.push_back(n);
            s= n*2+c;
            n= s%10;
            c= s/10;
        }
        return v;
    }
    
    int main()
    {   std::vector<int> vect;
        vect = func();
        for(int i=vect.size()-1; i>=0; i--)
        {   std::cout << vect[i];  }
        return 0;
    }
    
  5. 実行するとクイズの解が印字されます。
    842105263157894736
    
    421052631578947368 * 2 = 842105263157894736 になることを確かめて下さい。
    コンソールモードのプログラムは、自動的に「スタート」メニューに登録されることは無いようです。

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