3

假设我有一个类,它的成员是一个数组。是否可以通过以下方式在构造/运行时定义其大小:

class myClass {
    private:
        int myArray[n]
    public:
        myClass();
        someOtherMethod();
};

其中 n 是基于用户输入定义的变量。如果没有,最好的选择是什么?

4

3 回答 3

10

这取决于。

从语义上讲,有 3 种类型的数组:

  • 大小在编译时固定的数组
  • 在运行时固定大小的数组
  • 具有动态大小的数组

C++ 直接支持第一种和第三种情况,分别用正则数组和std::vector类。

C 还支持具有两个结构的第二种类型:

  • 可变长度数组(在堆栈上)
  • oldie struct hack 或tail-padding

我会建议,在 C++ 中,std::vector在你的情况下使用这个类。它提供的功能超出了您的需求,但使用起来更简单。

另一方面,即使在 C++ 中,您仍然可以使用尾部填充。不过,它确实需要仔细的工程。

于 2012-04-29T18:11:19.477 回答
4

使用向量。

class myClass {
    private:
        std::vector<int> myArray;
    public:
        myClass();
        someOtherMethod();
};

myClass::myClass (int size)
    : myArray (size)
{ 
    ...
}

然后,您可以像填写数组一样填写向量。或者,正如 Nawaz 指出的那样,使用reserve()为新元素保留空间,和/或push_back()将元素一次添加到背面。

于 2012-04-29T17:37:33.213 回答
1

类模板std::vector就是为此目的而设计的。

class myClass {
    private:
        std::vector<int> myArray;
    public:
        myClass(int size);
        someOtherMethod();
};

myClass::myClass(int size) : myArray(size)
{
}
于 2012-04-29T17:36:51.060 回答