对结构数组使用构造函数

Using a constructor for an array of structures

本文关键字:构造函数 数组 结构      更新时间:2023-10-16

我想创建一个结构数组。该结构使用如下所示的构造函数:

struct struct_seedinfo {
    struct_seedinfo(const mxArray *prhs[ ],const int seed_id){  
        mxArray *mat_coords, *mat_defvectorinit, *mat_corrcoef, *mat_roi_id;
        mat_coords = mxGetField(prhs[1],seed_id,"coords");
        coords = mxGetPr(mat_coords);
        mat_defvectorinit = mxGetField(prhs[1],seed_id,"defvectorinit");
        defvectorinit = mxGetPr(mat_defvectorinit);
        mat_corrcoef = mxGetField(prhs[1],seed_id,"corrcoef");
        corrcoef = *(mxGetPr(mat_corrcoef));
        mat_roi_id = mxGetField(prhs[1],seed_id,"roi_id");
        roi_id = *(mxGetPr(mat_roi_id));
    }
    double *coords;
    double *defvectorinit;
    double corrcoef;
    double roi_id;
    static int num_seeds;
};

如何创建这种结构的任意大小的数组?我需要为它分配内存,但似乎我需要在不调用构造函数的情况下分配内存,然后在forloop中稍后调用构造函数。有没有一种好的或首选的方法来做到这一点?谢谢

您可以执行std::vector<struct_seedinfo>。这将创建一个数组,并在需要时自动增加大小。

您还需要重载结构的复制构造函数和复制赋值运算符,以便能够在向量中使用。你也需要一个析构函数。这被称为C++中的三规则

由于大小保持不变,您可以使用以下解决方案:*这假设您可以定义默认构造函数。

首先在类中声明一个默认构造函数。

struct_seedinfo(){
//If you want to initlaize something.
}

然后你可以使用以下创建你的阵列:

 struct_seedinfo * arr = new struct_seedinfo[size_of_array];

然后你需要为每个空间做你的特定构建:

arr[i] = struct_seedinfo(//arguments);

这是如果你非常需要一个数组,我也认为向量解决方案更好。