我想知道如果我想将二维数组用作类变量,是否有人可以给我提供有关如何声明二维数组的示例。尺寸也应该是变量。
问问题
611 次
3 回答
1
这取决于您所说的“数组”是什么意思。在 C++ 中,如果在编译时不知道其大小(或大小),则无法声明内置数组类型的成员。
如果您需要一个表现为运行时大小数组的数据结构,您将不得不自己实现它或使用库实现。在这种情况下,您的类的直接私有成员将不会使用内置数组类型声明,而是作为对存储在动态内存中的实际数组的某种间接引用。在最简单的情况下,您必须在类中声明指针类型的成员。或者,您可以使用std::vector
类型的成员,它通常会将实际的数组数据保存在动态内存中,并在内部存储指针。
在您的情况下,对于 2D 数组,您可以声明一个std::vector<std::vector<T>>
类型的成员。
于 2013-09-11T01:10:06.897 回答
0
大小您没有明确声明您想要一个可变大小的多维数组(只是您想要大小变量),这是一个固定大小的解决方案。
template <typename T, unsigned int WIDTH, unsigned int HEIGHT>
struct Matrix
{
Matrix() : width(WIDTH), height(HEIGHT) {}
T* operator[](unsigned int idx) { return elements[idx]; }
T elements[WIDTH][HEIGHT];
int width, height;
};
class Foo
{
public:
float GetValue(unsigned int x, unsigned int y)
{
// Now you can access the width and height as variables.
assert(x < m_matrix.width && y < m_matrix.height);
// Operator allows you to index like so.
return m_matrix[x][y];
}
private:
// A private, 4 by 4 matrix of floats.
Matrix<float, 4, 4> m_matrix;
};
于 2013-09-11T01:33:10.610 回答
0
class ThisClass {
private:
int** MyArray;
int Xlim,Ylim; //Xlim can be used during deletion. May be useful elsewhere.
public:
ThisClass(int x,int y) {
Xlim = x;
Ylim = y;
MyArray = new int*[x];
for(int i = 0; i < x; i++) {
MyArray[i] = new int[y];
}
}
~ThisClass() {
for(int i = (Xlim-1); i >= 0; i--) {
delete [] MyArray[i];
}
delete [] MyArray;
}
};
int main(int argc, char* argv[]) {
ThisClass Mine(3,4);
return 0;
}
于 2013-09-11T01:10:10.730 回答