next up previous
: この文書について... : C 言語と行列 : サンプル・プログラム

C++ の場合

C++ でポインター配列に相当することをするには

/*
 * cpptest3.C --- ひとまずの完成
 */

#include <iostream.h>
#include <math.h>

typedef double scalar;
typedef scalar *vector;
typedef vector *matrix;

/* m行n列の行列を作る */
matrix new_matrix(int m, int n)
{
    vector abody;
    matrix a;

    a = new vector [m];
    if (a == NULL) return NULL;
    abody = new scalar [m * n];
    if (abody == NULL) {
        delete a;
        return NULL;
    }
    for (int i = 0; i < m; i++) {
        a[i] = abody;
    abody += n;
    }
    return a;
}

free_matrix(matrix a)
{
    delete a[0];
    delete a;
}

int
main()
{
    int m,n,i,j;
    matrix a;
    cout << "m,n: "; cin >> m >> n;
    a = new_matrix(m,n);
    if (a == NULL) {
        cerr << "new_matrix() に失敗\n";
        exit(1);
    }
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
            a[i][j] = (i+1)*(j+1);
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++)
            cout << "a[" << i << "][" << j << "]=" << a[i][j] << " ";
        cout << "\n";
    }
    return 0;
}


Masashi Katsurada 平成13年5月10日