如何在运行时定义成员数组大小

时间:2012-04-29 17:35:18

标签: c++ arrays

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

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

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

3 个答案:

答案 0 :(得分:8)

取决于。

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

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

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

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

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

我建议在C ++中使用std::vector类。它提供的不仅仅是你需要的,但更容易使用。

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

答案 1 :(得分:3)

使用矢量。

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

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

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

答案 2 :(得分:1)

课程模板std::vector专为此目的而设计。

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

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