指向数组的指针的 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++ 模板类动态数组的主要内容,如果未能解决你的问题,请参考以下文章