第8章練習問題2~3

  • 投稿日:
  • by
  • カテゴリ:

 第8章は、C++言語の記法である。関数の参照渡しのconstとか、参考になる。
 練習問題2~3を一度に解く。練習問題は、下記の通り。

 int型のvectorをcoutに出力する関数printを記述する。この関数は引数として、出力に「ラベルを付ける」ための文字列とvectorの2つを受け取る。
 フィビナッチ数列のvectorを作成し、printで出力する。vectorを作成するための関数としてfibonacci(x,y,v,n)を記述する。この場合、整数xとyはint型、vは空のvector<int>、nはvに設定する要素の個数である。

 printは、本文で説明していたvectorの参照渡しで内容を変更しないconstで渡す。逆にfibonaccは、vを参照渡しとして、中身を変更するということだろう。ということで、私の回答は、下記の通り。

#include "..\..\std_lib_facilities.h"

void print(string label,const vector<int>& v)
{
    for (int i = 0; i < v.size(); i++) {
        cout << label << "[" << i << "]=" << v[i] << "\n";
    }
    return;
}

void fibonacci(int x, int y, vector<int>& v, int n)
{
    if ((v.size()<n)||(n < 2)) return;

    v[0] = x;
    v[1] = y;

    for (int i = 2; i < n; i++) {
        v[i] = v[i - 2] + v[i - 1];
    }

    return;
}

int main() {
    const int N{ 10 }; /* Nはフィボナッチ数列の数を指定する定数 */
    vector<int> v(N);
    fibonacci(1, 2, v, N);
    print("fibonacci", v);
    return 0;
}

 

 回答例http://www.stroustrup.com/Programming/Solutions/Ch8/e8-2.cppは、pushbackを使って値を入れていくということにしている。問題文のvは空のvector<int>という指定に従うなら、確かにそうすべきだった。