gpt4 book ai didi

c - 如何实现可变长度的异构结构序列

转载 作者:太空狗 更新时间:2023-10-29 16:10:42 25 4
gpt4 key购买 nike

有 2 个不同大小的结构:

struct A{
int x, y, z;
};

struct B{
float x, y;
};

在运行时,程序会生成这两个结构的一系列实例。

手写示例如下:

Struct A a0 = { ... };
Struct A a1 = { ... };
Struct B b0 = { ... };
Struct A a2 = { ... };
Struct B b1 = { ... };
Struct B b2 = { ... };

因此,在这种情况下,“序列”是 a0, a1, b0, a2, b1, b2

我想将这个序列“放置”到某种数据结构中。 (完整序列的长度以及 struct Astruct B 的每个实例的出现顺序仅在运行时才知道。)

最简单的方法是什么?

例如,在 Python 中,我会做类似的事情:

Class A:
def __init__(self, x, y, z):
self.x, self.y, self.z = x, y, z

Class B:
def __init__(self, x, y):
self.x, self.y = x, y

# Manual example
a0 = A(...)
a1 = A(...)
b0 = B(...)
a2 = A(...)
b1 = B(...)
b2 = B(...)

my_list = []

# The list gets updated as the program runs
my_list.append(a0)
my_list.append(a1)
my_list.append(b0)
my_list.append(a2)
my_list.append(b1)
my_list.append(b2)
# etc., etc.

我怎样才能用 C 做同样的事情?

最佳答案

我建议在这里使用 union,将两个结构封装在一个结构中:

 union Data {
struct A A;
struct B B;
};

此外,您可以使用枚举或任何其他变量类型来指定您当前在此 union 中存储的内容:

 enum DataType {
TYPE_A = 0,
TYPE_B
};

最后将它们都包装在一个结构中:

 struct DataHolder {
union Data Data;
enum DataType DataType;
};

然后将其制作成您想要的列表,您可以使用指向 DataHolder 的指针或将其用作数组并将列表放入其中。 Append 可以使用动态重新分配 (realloc)。但是追加函数需要访问列表中当前有多少项,以及您希望添加到列表中的数据类型。

关于c - 如何实现可变长度的异构结构序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40962686/

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