gpt4 book ai didi

c++ - 异构数组实现

转载 作者:太空狗 更新时间:2023-10-29 20:39:44 27 4
gpt4 key购买 nike

非常感谢您的帮助!

在C 或C++ 中使用哪种数据结构来实现异构数组?该数组可以包含任何标准数据类型,如 int、float、char、string 等...

最佳答案

正如 ravi 所提到的,适当的数据结构称为标记 union (也称为变体记录)。实现它的一种方法是:

typedef union {
int tag;
struct {
int tag;
int val;
} int_;
struct {
int tag;
double val;
} double_;
} object;

然后你可以把这些组成一个数组。

object arr[5];

您使用 tag 字段来指示正在使用哪个 union 成员。通常使用 enum

enum type { INT, DOUBLE };

然后在创建对象时设置tag,访问前检查tag。这可以通过使用构造函数 函数进行封装。

object new_int(int i){
object ret;
ret.tag = INT;
ret.int_.val = i;
return ret;
}

object new_double(double d){
object ret;
ret.tag = DOUBLE;
ret.double_.val = d;
return ret;
}

而且您通常希望在访问标签上使用开关,为每种类型编写不同的大小写。

void print_object(object x){
switch(x.tag){
case INT: printf("%d\n", x.int_.val); break;
case DOUBLE: printf("%f\n", x.double_.val); break;
}
}

或者在某些情况下,您可能希望将数组折叠成单一类型,这样就可以在每次不检查标签的情况下访问它。

for (i = 0; i < sizeof arr/sizeof*arr; i++)
if (arr[i].tag == INT)
arr[i] = new_double(arr[i].int_.val);

关于c++ - 异构数组实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26772711/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com