Есть ли реализация автоматического масштабирования массива/динамического массива для 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