3

C99では次のように書くことができる多次元配列があるとしましょう:

#define SIZE1 10
int size2;

[...]

int myArray[SIZE1][size2];

いくつかのコンパイラでサポートされていますが、これは厳密には C++ ではなく、C++14 まで含まれません。boost::scoped_array を使用して同じ (私の場合は無関係なスタック/ヒープの問題) を取得するには、次のように記述します。

boost::scoped_array<int> myArray[SIZE1];
for (int i = 0; i < SIZE1; i++)
    myArray[i].reset(new int[size2]);

ですから、あまり簡潔な表現ではありません。何か不足していますか、または可変長の多次元配列の場合、迅速な割り当てを取得する簡単なプレーン C++ の方法はありませんか?

いくつかの参照:可変長配列が C++ 標準の一部ではないのはなぜですか?

4

4 に答える 4

0

ポインタを使用できる多次元配列だけが必要な場合、サイズ変更には新しいものにコピーして古いものを削除する必要がありますが、次のことができます。

int** m;
int rows, cols;
cin >> rows >> cols;
m = new int* [rows];
for (int i = 0; i < rows; i++) {
    m[i] = new int [cols];
}

for (int i = 0; i < rows; i++) {
    delete [] m[i];
}
delete [] m;   

または、次のような 1D 配列へのポインターを使用することもできます。

int* m;
int rows, cols;
cin >> rows >> cols;
m = new int [rows*cols];

次の方法でアクセスします。

for (int i = 0; i < rows; i++)
    for (int j = 0; j < cols; j++)
        m[i*cols+j] = i;

削除ステートメントを提供します。

delete [] m;   
于 2014-02-07T13:03:32.333 に答える