3.11.5 prog11-C++.C

ちなみに、C++ の場合は、 関数 malloc()free() よりも、 演算子 newdelete を使うべきである。 例えば次のようなプログラムになる。


/*
 * prog11-C++.cpp --- 「動的な配列」をポインターで実現する
 *   コンパイルするには、たとえば g++ -o prog11-C++ prog11-C++.cpp
 */

#include <iostream>
#include <cstdlib>
using namespace std;

/* n 次元のベクトル x, y の内積を計算する */
double inner_product(double *x, double *y, int n)
{
  int i;
  double s;
  s = 0.0;
  for (i = 0; i < n; i++)
    s += x[i] * y[i];
  return s;
}

int main(void)
{
  int i, N;
  double *a, *b;

  cout << "二つのベクトルの内積を計算します。" << endl;
  cout << "次元を入力してください: ";
  cin >> N;
  a = new double [N];
  b = new double [N];
  if (a == NULL || b == NULL) {
    cerr << "ベクトルを記憶するメモリーの確保に失敗しました。" << endl;
    exit(1);
  }

  cout << "一つ目のベクトル a の入力\n";
  for (i = 0; i < N; i++) {
    cout << i+1 << " 番目の成分= ";
    cin >> a[i];
  }

  cout << "二つ目のベクトル b の入力" << endl;
  for (i = 0; i < N; i++) {
    cout << i+1 << " 番目の成分=";
    cin >> b[i];
  }

  cout << "内積=" << inner_product(a, b, N) << endl;

  /* a, b のために確保したメモリーを解法する
   * プログラムの最後だからなくても良いが解放の仕方の説明用 */
  delete [] a;
  delete [] b;

  return 0;
}



桂田 祐史