假设我有一个包含数组成员的类。是否可以通过以下方式在构造/运行时定义其大小:
class myClass {
private:
int myArray[n]
public:
myClass();
someOtherMethod();
};
n是基于用户输入定义的变量。如果没有,最好的替代方案是什么?
这得看情况。
从语义上分,有以下3种数组类型:
C++ 直接支持第一种和第三种情况,分别是普通数组和 std::vector
类。
C 也支持第二种类型,采用两种结构:
我建议在你的情况下,在 C++ 中使用 std::vector
类。它提供了比你所需更多的功能,但使用起来更简单。
另一方面,在 C++ 中仍然可以使用尾部填充,不过需要仔细的工程设计。
class myClass {
private:
std::vector<int> myArray;
public:
myClass();
someOtherMethod();
};
myClass::myClass (int size)
: myArray (size)
{
...
}
然后,您可以像填充数组一样填充向量。或者,如Nawaz所指出的那样,使用reserve()
,该函数保留新元素的空间,和/或push_back()
用于逐个添加元素到末尾。
为此目的设计的类模板是 std::vector
。
class myClass {
private:
std::vector<int> myArray;
public:
myClass(int size);
someOtherMethod();
};
myClass::myClass(int size) : myArray(size)
{
}
resize()
?而不是reserve()
? - Nawazresize()
像数组一样填充它。 - chrisresize()
,为什么不使用 mem-initializer-list 来编写myClass::myClass (int size) : myArray(size) {}
呢?这样会更好。 - Nawaz