gpt4 book ai didi

c - C 中的 vector 结构

转载 作者:行者123 更新时间:2023-11-30 19:03:32 25 4
gpt4 key购买 nike

我想用 C 创建一个 ArrayList 或 Vector。也许我可以了解我是否走在正确的道路上或完全偏离基地

因此,如果我有一个 ArrayList 结构,其中包含一个数组(最初设置为 10),以及一个计数器来跟踪数组列表中已填充了多少元素,就像这样

typedef struct ArrayList
{
int counter;
int arr[10];
}

数组 arr 是否可以替换为另一个两倍于原始数组大小的数组?如果是这样,我该怎么做?

我在 add() 函数中有以下代码

if ( arrList->counter == (sizeof(arrList->arr)/sizeof(int))  )
{
int tempArray[((arrList->counter + 1) * 2)];
for (int i = 0; i < arrList->counter; i++)
{
tempArray[i] = arrList->arr[i];
}
strcpy( arrList->arr, tempArray );
}

我走在正确的道路上还是有更好的方法来创建可增长的数组?

最佳答案

您的方法不太好,因为它涉及将结构复制到临时原始数组。

对于您所遇到的问题,一个非常好的解决方案是所谓的灵活数组。谷歌它以获取更多信息。它基本上看起来像这样。

struct my_fam_array_t {
int arr_size;
int arr[];
};

要使用它,您始终将其声明为指针,如下所示

struct  my_fam_array_t *arr5;

然后按如下方式初始化它:

arr5 = malloc(sizeof(struct my_fam_array_t) + fam_size));

其中 fam_size 应该是您需要的数组大小。

还有两件事,不要忘记在结构中设置数组的大小,还要检查内存分配状态并处理任何错误。

使用后不要忘记释放它。

您现在可以正常使用该数组,例如

arr5->arr[3] = some_value;

您现在可以创建一个函数来调整数组的大小。我不会写它,但应该做的是:

malloc 具有新大小的新结构

将旧数组复制到新结构中

不要忘记释放旧数组

考虑到您是初学者,这对您来说可能是新的,但是灵活的数组是您需要的工具。

顺便说一下,您也可以使用 realloc,阅读一下它,它可能有用,但是要非常小心,正确处理内存不足故障。 Google 关于 realloc 和 SEI CERT C 标准

编辑:

确保您使用 C99 或更高版本。相反,您必须使用数组大小​​为 1 的结构,并且应从 malloc 大小中减去 1。如果您的编译器支持此扩展,您可以使用大小为 0 的数组。

关于c - C 中的 vector 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53822685/

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