如何使数组的大小依赖于构造函数参数?

时间:2017-05-13 09:27:33

标签: c++ arrays struct constructor static

在队列下面的不正确的代码中,我试图让结构'bar'保存一个长度为ARR_SIZE的数组。我希望这个变量取决于我在构造过程中给出的参数 所以在一个实例中,当我构造一个foo时,我希望结构中的数组长度为8,或者在另一种情况下,我想使它成为1000的数组。怎么办呢?

我知道您可以将ARR_SIZE设为static变量,但这并不意味着数组foo的每个实例的数组大小相同吗?
有没有办法让这个参数对foo的每个实例都不同?

class foo
{
private:
    int ARR_SIZE;
public:
    foo();
    foo(int arr_size);
    ~foo();
    struct bar {
        int arrInt[ARR_SIZE];
        bar* next;
    };
    void enqueue(int a);
    int dequeue();
};


foo::foo()
{
    ARR_SIZE = 8;
}

foo::foo(int arr_size)
{
    ARR_SIZE = arr_size;
}

1 个答案:

答案 0 :(得分:1)

原始数组在C ++中无法在运行时更改其大小。这就是std::vector类在c ++标准库中的用法。

将班级更改为

class foo
{
public:
    foo() : arr_size_(8) {}
    foo(size_t arr_size) : arr_size_(arr_size) {}
    ~foo();
    struct bar {
        std::vector<int> arrInt; // <<< use std::vector
        bar* next;
    };
    void enqueue(int a);
    int dequeue();
private:
    size_t arr_size_;
};

现在,只要您需要实例化一个新的bar对象,就可以编写

void foo::enqueue(int a) {
    bar b{ arrInt(arr_size_), nullptr };
    // or
    bar* b = new bar{ arrInt(arr_size_), nullptr };
    // ...
}