c ++ bidimensional数组作为私有类变量

时间:2013-09-11 00:59:40

标签: c++ arrays class variables

我想知道如果我想将它用作类变量,是否有人可以举例说明如何声明二维数组。大小也应该是变量。

3 个答案:

答案 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;
};