创建类时如何定义数组的大小?
Posted
技术标签:
【中文标题】创建类时如何定义数组的大小?【英文标题】:How do I define an array's size when the class is created? 【发布时间】:2015-08-22 13:04:18 【问题描述】:我想创建一个包含在类中的数组。数组将是固定大小的,但直到类的构造函数我才知道这个固定大小。
假设用户创建了类似的东西:Fibanocci f(value1, value2, size)
。然后,size
参数将用于确定包含数组中的元素数量,该数量将在 Fibanocci
实例的整个生命周期中固定。
我该如何解决这个问题?
【问题讨论】:
std::vector
@PiotrSkotnicki 即使数组的大小在类实例的整个整个生命周期中都是固定的?需要分配的内存量仍然是固定的。
@IQAndreas 是的,只需在构造函数中使用reserve(size)
就可以了。
大小仍然是运行时变量,因此无法在编译期间设置(std::array
和旧 C 样式数组需要)。因此std::vector
.
【参考方案1】:
改为使用std::vector<type> vector
,您可以使用int size = vector.size()
。您可以在构造函数中初始化向量的大小。例如,
// MyClass.hpp
class MyClass
public:
MyClass();
// Say I know this vector is going to have 5 elements
std::vector<double> myVector;
// MyClass.cpp
MyClass::MyClass() : myVector(5)
int vectorSize = myVector.size(); //vectorSize = 5
【讨论】:
【参考方案2】:数组大小必须在编译时知道!!不要认为使用向量会失去性能,它是数组的包装器。如果你真的很严格并且有 C++11,你可以使用标准库中的数组。
我是使用调整大小还是保留?
Reserve 将分配内存但不插入任何内容。除非您指定参数,否则调整大小将插入默认构造对象的副本。
【讨论】:
std::array
不支持运行时确定的大小。
我在回答中的什么地方说过这些话?
你说你可以使用std::array。
std::array 根本不合适,因为它的大小(即模板参数)也应该在编译时知道。【参考方案3】:
Java 使数组动态化,它将在运行时分配大小。 代理类将形成其对象就是这个数组。
int a[]=new int[10];
【讨论】:
这个问题与java无关以上是关于创建类时如何定义数组的大小?的主要内容,如果未能解决你的问题,请参考以下文章