创建类时如何定义数组的大小?

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无关

以上是关于创建类时如何定义数组的大小?的主要内容,如果未能解决你的问题,请参考以下文章

matlab如何创建多维数组

如何创建动态大小的结构数组?

急!!vb怎么创建数组?

C++问题:如何定义一个未知大小的一维数组,数组大小由输入的值决定

如何根据输入数量定义数组大小?

C语言如何定义一个可变大小的数组