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

我想存储一个Datein 类型的对象dateList[i][0]和一个intin dateList[i][1]。这可能吗?

谢谢你。

4

4 回答 4

4

不。

单个数组必须是单一类型。如果您希望元素代表不同类型的数据,那么数组中的元素需要是某种基类(指针),或者可能是像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:把你要共享的类型放在一个singleunion中,然后在你的代码中使用与维度类型对应的成员。但是,这种方法也是限制性最强的,因为带有构造函数/析构函数的类型不能进入unions.

一种更方便的方法是构建一个一维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;
}

这种方法让编译器可以更接近地检查您的类型,从而为您提供更强大的解决方案。

于 2013-11-04T17:18:58.653 回答
1

简短的回答:不。数组只有一种类型。对于多维数组也是如此。

阅读结构甚至更高的数据结构,map以实现所需的效果。

于 2013-11-04T17:21:24.867 回答