Существует ли реализация автоматического изменения размера массива / динамического массива для C, которая поставляется с glibc? - PullRequest
15 голосов
/ 23 февраля 2009

Существует ли реализация динамического массива в glibc или в любой из стандартных библиотек Linux для C? Я хочу иметь возможность добавлять в список, не беспокоясь о его размере. Я знаю, что std :: vector существует для C ++, но мне нужен эквивалент C.

Ответы [ 4 ]

10 голосов
/ 23 февраля 2009

Полагаю, вы думаете о 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);
4 голосов
/ 23 февраля 2009

В glib есть динамический массив. (не glibc, хотя) Проверьте GArray и GPtrArray. Динамический массив на самом деле не то же самое, что связанный список.

В любом случае этот - самый полезный ресурс, который мне удалось найти при изучении glib.

1 голос
/ 23 февраля 2009

Вы также можете использовать препятствия

1 голос
/ 23 февраля 2009

Я всегда использую realloc для этого, вы можете обернуть вокруг него свои собственные функции массива. AFAIK, для этого нет других встроенных вещей.

...