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

How to initialize a dynamic array of customized struct in C++

本文关键字:结构体 动态 数组 自定义 初始化 c++      更新时间:2023-10-16

我有下面的结构体,我想初始化

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