繁体   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