// 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]
类型的对象,在int
中存储dateList[i][1]
。这可能吗?
谢谢。
答案 0 :(得分:4)
没有
单个数组必须是单一类型。如果您希望元素表示不同类型的数据,那么数组中的元素需要是某种基类(指针),或者可能是像variant
这样的区分类型。
答案 1 :(得分: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));
答案 2 :(得分:1)
有多种方法可以做到这一点。最直接的方法是使用union
:将要共享的类型放在一个union
中,然后在代码中使用与维度类型对应的成员。但是,这种方法也是限制性最强的,因为带有构造函数/析构函数的类型不能进入union
。
更方便的方法是构建一个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;
}
这种方法可以让编译器更接近地检查您的类型,为您提供更强大的解决方案。
答案 3 :(得分:1)
简短回答:不。数组只是一种类型。对于多维数组也是如此。
了解结构甚至更高的数据结构,例如map
,以获得所需的效果。