2

2次元配列の値を0に初期化したいのですが、うまくいきません。コンストラクターで ** 配列の値を 0 に初期化できますか。はいの場合、方法。私のコードは.

#include <iostream>
using namespace std;

int main(){
int row, col;
cin>>row;
cin>>col;
int **array=new int*[row];
        for (int i=0; i<row; i++){
            array[i]=new int[col];
        }
            for (int i=0; i<row;i++){
                for (int j=0; j<col; j++){
                    array[i][j]={'0'};
                    cout<<array[i][j]<<" ";
                }
                cout<<endl;
            }

}

さらに、配列のi番目の要素を他の要素に置き換える必要がある場合、誰かが説明できますか?メモリ割り当てをどのように処理しますか?

4

3 に答える 3

2

あなたはおそらくしたいですarray[i][j]=0;。なぜcharタイプを使用していたの'0'ですか?ただし、もっと簡単な方法があります。値array[i]=new int[col]();を追加()して各列を初期化するだけです。

より良い方法もあります:

std::vector<std::vector<int>> array(row, std::vector<int>(col));

最初のコメントでは、新しいサイズで新しい配列を作成し、すべてのデータをコピーして、古い 2 次元配列を削除する必要があります。

2 番目のコメントについては、以下に例を示します。

struct A
{
    int **array;
    A(int row, int col) : array(new int*[row])
    {
       for (int i=0; i < row; i++)
       {
          array[i]=new int[col]();
       }
    }
};

PS: を使用すると、多くの作業を節約できますstd::vector

于 2012-11-28T05:39:20.413 に答える
0

次のようなことを試すことができます:-

class A
{
 public:
 A():my2DArray() {0}
 private:
 B* my2DArray[max1][max2];
 };
于 2012-11-28T05:36:42.720 に答える