簡體   English   中英

我可以使用不同類型的二維數組嗎?

[英]Can I have a two dimensional array of different types?

// 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類型的對象存儲在dateList[i][0] ,將intdateList[i][1] 這可能嗎?

謝謝。

沒有。

單個數組必須是單個類型。 如果要讓元素表示不同類型的數據,則數組中的元素必須是某種基類(指針),或者可能是諸如variant的可區分類型。

除非您有絕對的理由要這樣做,否則聽起來好像您想要一個結構向量:

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

有多種實現方法。 最直接的方法是使用union :將要共享的類型放在單個union ,然后在代碼中使用與維的類型相對應的成員。 但是,此方法也是限制性最強的,因為帶有構造函數/析構函數的類型不能加入union

一種更方便的方法是構建pair<Date,int>對象的pair<Date,int>維數組,如下所示:

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

這種方法使編譯器可以更仔細地檢查您的類型,從而為您提供更強大的解決方案。

簡短答案:否。數組僅是一種類型。 對於多維數組也是如此。

閱讀有關結構或什至更高的數據結構(如map以達到所需的效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM