我想知道如果我想将它用作类变量,是否有人可以举例说明如何声明二维数组。大小也应该是变量。
答案 0 :(得分:1)
这取决于你对“数组”的意思。在C ++中,当在编译时不知道其大小(或大小)时,无法声明内置数组类型的成员。
如果您需要一个行为为运行时大小数组的数据结构,则必须自己实现它或使用库实现。在这种情况下,类的直接私有成员不会使用内置数组类型声明,而是作为对存储的实际数组的某种间接引用,很可能是在动态内存中。在最简单的情况下,您必须在类中声明 pointer 类型的成员。或者,您可以使用std::vector
类型的成员,该成员通常将实际数组数据保存在动态内存中,并在内部存储指针。
在您的情况下,对于2D数组,您可以声明std::vector<std::vector<T>>
类型的成员。
答案 1 :(得分: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;
}
答案 2 :(得分: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;
};