gpt4 book ai didi

c++ - 如何在 C++ 中初始化自定义结构的动态数组

转载 作者:行者123 更新时间:2023-11-28 00:29:24 25 4
gpt4 key购买 nike

我有以下要初始化的结构

struct Box{
int *dimval;
int no;
int dim;

Box(dim){
this->dim = dim;
dimval = new int[dim]
}

}

现在在我的主要功能中。我想初始化一个 Box 结构数组,但这对我的实现有问题。

int main(){
Box *boxes;
int num_box, dim;

cin>>num_box>>dim;

boxes = new Box[num_box](dim);// I know this is devil here.
}

我想要一个包含 num_box Box 项的动态数组,每个项都使用 dim long 的动态数组进行初始化。我该怎么做?

最佳答案

你不能创建一个类型的数组,除非它有一个默认的构造函数,然后你就不能初始化它们中的每一个。但是,您可以使用默认对象初始化 vector ,这正是您在这里所要求的。

#include <vector>

int num_box, dim;
cin >> num_box >> dim;
vector<Box> boxes(num_box, Box(dim));

请注意,您需要一个复制构造函数来处理 dimval...

的复制
#include <algorithm>

struct Box
{
// ...

Box(const Box& that)
{
this->dim = that.dim;
this->no = that.no;
this->dimval = new int[dim];
copy(that.dimval, that.dimval + that.dim, this->dimval);
}
};

...但是如果您也简单地将 dimval 指针替换为 vector ,则可以使用默认的复制构造函数,因为 vector 处理复制(这也可以修复泄漏)。

struct Box
{
vector<int> dimval;
int no;
int dim;

Box(int dim)
: dimval(dim)
{
this->dim = dim;
}
}

关于c++ - 如何在 C++ 中初始化自定义结构的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23483845/

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