15

glibc 或任何 C 的标准 Linux 库中是否有动态数组实现?我希望能够添加到列表中而不用担心它的大小。我知道 C++ 存在 std::vector,但我需要 C 等价物。

4

4 回答 4

10

我猜你正在考虑realloc。但最好将列表包装在结构中以跟踪其当前长度

示例 API

struct s_dynamic_array {
    int allocated;   /* keep track of allocated size  */
    int usedLength;  /* keep track of usage           */
    int *array;      /* dynamicaly grown with realloc */
};
typedef struct s_dynamic_array s_dynamic_array;

s_dynamic_array *new_dynamic_array(int initalSize);
void             free_dynamic_array(s_dynamic_array *array);
int              size_of_dynamic_array(s_dynamic_array *array);
s_dynamic_array *add_int_to_dynamic_array(s_dynamic_array *array, int value);
int              int_at_index(s_dynamic_array *array, int index);
于 2009-02-22T22:07:47.790 回答
4

glib中有一个动态数组。(虽然不是 glibc)检查 GArray 和 GPtrArray。不过,动态数组与链表并不完全相同。

无论如何,这是我在学习 glib 时能找到的最有用的资源。

于 2009-02-22T22:33:43.390 回答
1

我总是为此使用realloc,您可以将自己的数组函数包装在它周围。AFAIK,没有其他内置的东西。

于 2009-02-22T22:09:30.907 回答
1

你也可以使用obstacks

于 2009-02-23T07:06:24.280 回答