Есть ли реализация автоматического масштабирования массива/динамического массива для C, которая поставляется с glibc?

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

Ответы

Ответ 1

Думаю, вы думаете о 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);

Ответ 2

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

Anyways этот - самый полезный ресурс, который я смог найти при изучении glib.

Ответ 3

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

Ответ 4

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