在 C++ 中初始化动态二维数组

Posted

技术标签:

【中文标题】在 C++ 中初始化动态二维数组【英文标题】:Initializing Dynamic 2d array in c++ 【发布时间】:2020-10-30 07:07:24 【问题描述】:

我已经创建了类和第一个构造函数,但是我不知道如何按照 2 中的要求将 2d 数组初始化为 ref,需要使用动态内存分配来执行此操作。

创建一个名为 matrix 的类,并具有跟随的私有成员:

• int **p;

• 整数行;

• 整数列;

该类应具有以下成员函数:

    matrix () 将二维数组初始化为零。假设 rows = 2 和 cols = 2 matrix (int **ref, int r, int c) 将二维数组初始化为ref

我的密码:


class Matrix

    private:
        int **p;
        int rows;
        int cols;
    public:
        // CONSTRUCTORS
        Matrix()
        
            rows = 2;
            cols = 2;
            p = new int*[2];
            // initialize the array with 2x2 size
            for (int i=0; i<2; i++)
            
                p[i] = new int[2];
            
            //  taking input for the array
            for (int i=0; i<2; i++)
            
                for (int j=0; j<2; j++)
                   
                    p[i][j] = 0;
                
            


        ; 
        
        Matrix(int **ref, int r, int c)
        
            rows = r;
            cols = c;
            p = new int*[rows];
            // initialize the array with 2x2 size
            for (int i=0; i<rows; i++)
            
                p[i] = new int[cols];
            
            //  taking input for the array
            for (int i=0; i<rows; i++)
            
                for (int j=0; j<cols; j++)
                   
                    p[i][j] = **ref;
                
            
        

        friend ostream& operator << (ostream& output, Matrix& obj)
        
            output << obj.rows;
            cout << " = ROWS" << endl;
            output << obj.cols;
            cout << " = columns" << endl;
            for (int i=0; i<obj.rows; i++)
            
                for(int j=0; j<obj.cols;j++)
                
                    cout << obj.p[i][j] << " " ;
                
                cout << endl;
            
            return output;
        
;

int main()

    Matrix a;
    cout << a << endl;
    return 0;


【问题讨论】:

令人失望的是他们没有使用size_t 而不是int 来指定rowscols。也许他们想要两者的负数? 【参考方案1】:

看来p[i][j] = **ref; 应该是p[i][j] = ref[i][j];

你也应该关注The Rule of Three。换句话说,您应该声明复制构造函数和赋值运算符来正确处理对象(包括指针)的复制。

【讨论】:

而在main函数中怎么调用呢? 会像int data[2][3] = 1, 2, 3, 4, 5, 6; int *p[] = data[0], data[1]; Matrix a(p, 2, 3);

以上是关于在 C++ 中初始化动态二维数组的主要内容,如果未能解决你的问题,请参考以下文章

C++中二维列表数组的动态初始化

C++二维数组(指针)做参数

使用动态二维数组时的 C++ 分段错误(核心转储)

C++:使用函数为二维数组分配内存时出错

如何在 C++ 中为二维对象数组分配内存? [复制]

利用c++中的vector创建动态二维数组