如何初始化包含所有元素0的2-D动态内存指针数组

时间:2012-11-28 05:34:18

标签: c++

我想将2-D数组的值初始化为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;
            }

}

进一步有人可以解释我是否必须用其他元素替换数组中的ith elem,我将如何处理内存分配。

3 个答案:

答案 0 :(得分:2)

你可能想要array[i][j]=0;。您为什么使用char类型'0'? 但是,有一种更简单的方法:array[i]=new int[col]();,只需将()添加到值初始化每列。

还有一种更好的方法:

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

对于您的第一个评论,您需要创建一个具有新大小的新数组,复制所有数据,并删除旧的二维数组。

对于您的第二条评论,这是一个例子:

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可以为自己节省大量工作。

答案 1 :(得分:1)

此代码适用于gcc

#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个元素我们可以做一些lyk

int *aa = new int[p];
swap(array[i], aa)

但为了使其在逻辑上正确工作,你需要确保p> = =数组数组[i]的大小指向。在我们的大多数用例中,我们都使用它们。

答案 2 :(得分:0)

您可以尝试这样的事情: -

class A
{
 public:
 A():my2DArray() {0}
 private:
 B* my2DArray[max1][max2];
 };