C++の場合は、色々便利な線型演算用のクラス・ライブラリィがあるので、 そういうものを使えば良いと思うが、 C++ は基本的に C の上位互換なので、 上で説明しているやり方は C++ でも使える。
ただし C++ では、メモリの割り当てと解放は (C のように malloc(), free() を使うのでなく)、 new と delete を使うのが普通なので、 それらを使うように書き直しておく。
(NULL でなく、nullptr とすべきなのかな?)
C++ 版 new_matrix() |
#include <iostream> using namespace std; typedef double *vector; typedef vector *matrix; // matrix って行列という意味です。 matrix new_matrix(int m, int n) { matrix a = new vector [m]; if (a == NULL) { return NULL; } vector ap = new double [m*n]; if (ap == NULL) { delete [] a; return NULL; } for (int i = 0; i < m; i++) a[i] = ap + i * n; return a; } void delete_matrix(matrix a) { delete [] a[0]; delete [] a; } |
桂田 祐史