gpt4 book ai didi

c++ - 如何使数组的大小取决于构造函数参数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:34 24 4
gpt4 key购买 nike

在队列下方的不正确代码中,我试图让结构“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;
}

最佳答案

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

将你的类(class)改为

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 };
// ...
}

关于c++ - 如何使数组的大小取决于构造函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43951466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com