【问题标题】:How do I define an array's size when the class is created?创建类时如何定义数组的大小?
【发布时间】:2025-12-27 13:45:16
【问题描述】:

我想创建一个包含在类中的数组。数组是固定大小的,但直到类的构造函数我才知道这个固定大小。

假设用户创建了类似的东西:Fibanocci f(value1, value2, size)。然后,size 参数将用于确定包含数组中的元素数量,该数量将在 Fibanocci 实例的整个生命周期中固定。

我该如何解决这个问题?

【问题讨论】:

  • @PiotrSkotnicki 即使数组的大小在类实例的整个整个生命周期中都是固定的?需要分配的内存量仍然是固定的。
  • @IQAndreas 是的,只需在构造函数中使用reserve(size) 就可以了。
  • 大小仍然是运行时变量,因此无法在编译期间设置(std::array 和旧 C 样式数组需要)。因此std::vector.

标签: c++ arrays constructor


【解决方案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无关