gpt4 book ai didi

c++ - 删除模板化 C++ 二维数组

转载 作者:行者123 更新时间:2023-11-30 02:01:56 26 4
gpt4 key购买 nike

对 C++ 要求在二维数组中传递维度的烦恼让我开始研究模板化的 Matrix 类。我用 C# 编写代码已经有一段时间了,所以我确信我在这里有点生疏。

问题是,当我遇到试图删除二维数组的析构函数时,我得到了一个堆异常。

感谢接受任何帮助!

template <typename T>
class Matrix {
public:
Matrix(int m, int n) : nRows(m), nCols(n) {
pMatrix = new T * [nRows];
for (int i = 0; i < nCols; i++) {
pMatrix[i] = new T[nCols];
}
}
~Matrix() {
if (pMatrix != NULL) {
for (int i = 0; i < nRows; i++) { delete[] pMatrix[i]; }
delete[] pMatrix;
}
}
T ** GetMatrix() const { return pMatrix; }
T * Row(int i) const { return pMatrix[i]; }
inline T Cell(int row, int col) const { return pMatrix[row][col]; }
inline int GetNRows() const { return nRows; }
inline int GetNCols() const { return nCols; }
private:
int nRows, nCols;
T ** pMatrix;
};

最佳答案

这是错误:

for (int i = 0; i < nCols; i++) {
pMatrix[i] = new T[nCols];
}

循环应该一直到nRows , 不是 nCols .

除此之外,让我告诉您一些我厌倦了分配二维数组时所做的事情。我必须做一个 3-d 数组。我用了 map ,它从一个坐标映射——一个包含 x、y、z 的结构到我想要的类型。

我工作得很快,不需要分配或取消分配。分配给坐标只需通过

mymap[Coord(x, y, z)] = whatever...

当然我需要定义 Coord构造并重载 < operator ,但我发现这种方式比尝试分配和取消分配 3 维数组更方便。

当然,您需要检查此方案是否对您来说足够快。我用它来使用 OpenGL 在一个大立方体中绘制单元格,并且没有任何提示。

关于c++ - 删除模板化 C++ 二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13667431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com