31

このウェブサイトの最初のタイマーなので、ここに行きます..

私は C++ の初心者で、現在、「DS Malik の C++ 第 2 版を使用したデータ構造」という本を読んでいます。

この本の中で、Malik は動的な 2 次元配列を作成する 2 つの方法を提供しています。最初のメソッドでは、変数をポインターの配列として宣言します。ここで、各ポインターは整数型です。元。

int *board[4];

..次に、ポインタの配列を「行」として使用しながら、forループを使用して「列」を作成します。

2 番目の方法では、ポインターへのポインターを使用します。

int **board;
board = new int* [10]; 

私の質問はこれです: どちらがより良い方法ですか? ** メソッドの方が視覚化が容易ですが、最初のメソッドはほぼ同じ方法で使用できます。どちらの方法も、動的な 2 次元配列を作成するために使用できます。

編集:上記の投稿では十分に明確ではありませんでした。ここに私が試したいくつかのコードがあります:

int row, col;

cout << "Enter row size:";
cin >> row;
cout << "\ncol:";
cin >> col;

int *p_board[row];
for (int i=0; i < row; i++)
    p_board[i] = new int[col];

for (int i=0; i < row; i++)
{
    for (int j=0; j < col; j++)
    {
        p_board[i][j] = j;
        cout << p_board[i][j] << " ";
    }
    cout << endl;
}
cout << endl << endl;

int **p_p_board;
p_p_board = new int* [row];
for (int i=0; i < row; i++)
    p_p_board[i] = new int[col];

for (int i=0; i < row; i++)
{
    for (int j=0; j < col; j++)
    {
        p_p_board[i][j] = j;
        cout << p_p_board[i][j] << " ";
    }
    cout << endl;
}
4

5 に答える 5

1

どちらの場合も、内側の次元は動的に指定できます (つまり、変数から取得されます) が、違いは外側の次元にあります。

この質問は、基本的に次の質問と同じです。

int* x = new int[4];よりも「良い」ですかint x[4]

答えは、「その配列次元を動的に選択する必要がない限り、いいえ」です。

于 2013-04-14T17:49:29.223 に答える