指向数组的指针的 C++ 模板类动态数组

Posted

技术标签:

【中文标题】指向数组的指针的 C++ 模板类动态数组【英文标题】:C++ Template Class Dynamic Array of Pointers to Arrays 【发布时间】:2017-09-26 02:00:55 【问题描述】:

我正在用 C++ 制作一个模板化的矩阵类。为了创建这个类,我创建了一个指针数组,这些指针指向动态数组。

到目前为止我有:

    template<typename T> class Matrix
    
    public:
        //constructor
        int **m = new int*[_rows];
        for (int i = 0; i < _rows; i++)
        
             m[i] = new int[_cols];
        

        //destructor
        for (int i = 0; i < _rows; i++)
        
            delete[] m[i]
        
        delete[] m;
    ;

我还想创建一些函数来操作这个结构。 我见过很多类似的代码,但我没有看到它是如何创建一个包含指向其他数组的指针的数组。这个概念让我感到困惑,我只想有人向我澄清我应该如何做我想做的事。

我希望类被隔离并且与输入没有任何关系。它可能会在其他代码中被调用并使用我的函数来创建矩阵结构。创建一个指针数组对我来说并不是令人困惑的部分,它使这些指针指向其他数组,并且指针数组的大小会根据输入条目的数量而增加。

【问题讨论】:

让您的生活更轻松,只需使用 std::vector 而不是指针和原始内存管理。 谢谢。但从概念上讲,我正在尝试使用动态分配的数组来实现吗? 当然可以。矢量如何在内部工作?它所做的与您尝试做的没有什么不同,只是更安全。其次,您的目标是开发 Matrix 类还是摆弄动态数组管理?如果是开发 Matrix 类,那么使用vector 可以让您继续开发 Matrix 类的实际工作。 【参考方案1】:
#include <iostream>

using namespace std;

template<typename T> class Matrix

public:
    Matrix(int row, int col)
    
        _rows = row;
        _cols = col;
        m = new T*[_rows];
        for (int i = 0; i < _rows; i++)
        
            m[i] = new T[_cols];
            for(int j=0; j < _cols; j++)
            
                m[i][j] = i*10 + j;
            
        
    

    ~Matrix()
    
        for (int i = 0; i < _rows; i++)
        
            delete[] m[i];
        
        delete[] m;
    

    T **m;
    int _rows;
    int _cols;
;

void main()

    Matrix<int> a(3,4);

    for(int i=0; i<a._rows; i++)
    
        for(int j=0; j<a._cols; j++)
        
            cout << "[" << i << "][" << j << "]" << a.m[i][j] << " ";
        
        cout << endl;
    


结果:

[0][0]0 [0][1]1 [0][2]2 [0][3]3

[1][0]10 [1][1]11 [1][2]12 [1][3]13

[2][0]20 [2][1]21 [2][2]22 [2][3]23

【讨论】:

以上是关于指向数组的指针的 C++ 模板类动态数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中初始化指向动态二维数组的指针 [关闭]

指向 C++ 中动态分配的二维数组中的一行的指针

指向对象的指针数组的动态分配

如何使用 C++ 中的指针动态分配和解除分配二维数组?

C++ new申请二维数组整理

C ++在指向结构的指针中访问类数组指针