1

我想知道如果我想将二维数组用作类变量,是否有人可以给我提供有关如何声明二维数组的示例。尺寸也应该是变量。

4

3 回答 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 回答