0

構造体の配列を作成したい。構造体は、以下に示すようにコンストラクターを使用します。

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でコンストラクタを呼び出す必要があるようです。これを行うための良い方法または推奨される方法はありますか? ありがとう。

4

2 に答える 2

2

できますstd::vector<struct_seedinfo>。これにより配列が作成され、必要に応じてサイズが自動的に増加します。

また、構造体をベクターで使用できるようにするには、コピー コンストラクターとコピー代入演算子をオーバーロードする必要があります。デストラクタも必要です。これは、C++ では 3 つのルールと呼ばれます。

于 2012-09-14T17:03:58.063 に答える
1

サイズは一定のままなので、次の解決策を使用できます。 *これは、デフォルトのコンストラクターを定義しても問題ないことを前提としています。

まず、クラスでデフォルト コンストラクターを宣言します。

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

以下を使用して配列を作成できます。

 struct_seedinfo * arr = new struct_seedinfo[size_of_array];

そして、特定のビルドを行うために各スペースが必要です:

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

これは、配列がどうしても必要な場合です。ベクトルソリューションの方が優れていると思います。

于 2012-09-14T17:45:45.897 に答える