0
// create array
Date** dateList = new Date*[SIZE];

// populate array
for(int i = 0; i < SIZE; i++) {
    dateList[i] = new Date[2];
    Date date;
    date.input();

    dateList[i][0] = date;

    int n = dateNum(date);
    dateList[i][1] = n;
}

Dateタイプ indateList[i][0]およびintinのオブジェクトを格納したいdateList[i][1]。これは可能ですか?

ありがとうございました。

4

4 に答える 4

4

いいえ。

1 つの配列は、1 つの型でなければなりません。要素でさまざまなタイプのデータを表現したい場合、配列内の要素は、ある種の基本クラス (ポインター) であるか、またはvariant.

于 2013-11-04T17:17:49.720 に答える
2

他にやるべき圧倒的な理由がない限り、構造体のベクトルが必要なように思えます。

struct whatever { 
    Date date;
    int n;

    whatever(Date const &d, int i) : date(d), n(i) {}    
};

std::vector<whatever> dates;

Date date;
date.input();

dates.push_back(whatever(date, datenum(date));
于 2013-11-04T17:25:13.687 に答える
1

それには複数の方法があります。最も直接的な方法はunions を使用することです: 共有したい型を単一の に置き、unionコードで次元の型に対応するメンバーを使用します。ただし、コンストラクター/デストラクターを持つ型は s に入ることができないため、このアプローチは最も制限的でもありunionます。

pair<Date,int>これを行うより便利な方法は、次のようにオブジェクトの 1 次元配列を作成することです。

pair<Date,int>* dateList = new  pair<Date,int>[SIZE];

// populate array
for(int i = 0; i < SIZE; i++) {
    Date date;
    date.input();
    int n = dateNum(date);

    dateList[i] = make_pair(date, n);
}
for(int i = 0; i < SIZE; i++) {
    cout << "Date: " date[i].first << " ";
    cout << "Int: " date[i].second << endl;
}

このアプローチにより、コンパイラは型をより厳密にチェックできるようになり、より堅牢なソリューションが得られます。

于 2013-11-04T17:18:58.653 に答える
1

簡単な答え: いいえ。配列は 1 つのタイプのみです。これは多次元配列にも当てはまります。

map望ましい効果を達成するために、構造体またはさらに高度なデータ構造について読んでください。

于 2013-11-04T17:21:24.867 に答える