【问题标题】:Using a constructor for an array of structures对结构数组使用构造函数
【发布时间】:2012-09-14 17:00:02
【问题描述】:

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

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 中调用构造函数。有没有一种好的或首选的方法来做到这一点?谢谢。

【问题讨论】:

  • 你知道你的数组在运行时的大小还是一直在变化?
  • 数组大小只有在函数调用后才知道,但在整个函数中保持不变。我可能会尝试矢量路线,即使它保持不变只是为了了解更多关于 STL 的信息。

标签: c++ arrays constructor structure


【解决方案1】:

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

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

【讨论】:

  • 如果您有 C++11,您可以将其与 initializer_list 一起使用,以轻松初始化具有不同值的元素。
  • 嗯.. 最好(不包括 C++11)创建向量,然后在 forloop 中执行 push_backs?
  • @user1346994 是的,使用 for 循环
【解决方案2】:

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

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

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

然后你可以使用以下来创建你的数组:

 struct_seedinfo * arr = new struct_seedinfo[size_of_array];

然后您需要为每个空间进行特定的构建:

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

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

【讨论】:

  • 我会试试矢量路线。如果时间太长或者我最终不喜欢它,我会回到这个。但是,是的,这就是我最初想要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多