Czy istnieje implementacja dynamic array w glibc lub w dowolnej ze standardowych bibliotek systemu Linux dla języka C? Chcę móc dodać do listy, nie martwiąc się o jej rozmiar. Wiem, że std :: vector istnieje dla C++, ale potrzebuję ekwiwalentu C.Czy istnieje automatyczna zmiana rozmiaru tablicy/implementacja dynamicznej tablicy dla C dostarczanej z glibc?
Odpowiedz
Domyślam się, że myślisz o realloc. Ale lepiej zawinąć listy w strukturze śledzić jego obecnej długości
przykład 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);
Zawsze używam realloc na to, można owinąć własne funkcje tablicowe wokół niego. AFAIK, nie ma na to innych wbudowanych rzeczy.
Miałem nadzieję uniknąć ponownego wynalezienia koła. jaka szkoda. Jestem pewna, że omijanie, o którym mówisz, dzieje się przez cały czas. –
Być może jest tam jakaś biblioteka, ale większość z nich jest dla C++ ... – schnaader
:-) W porządku. Będę używał realloc. Dziękuję za szybką odpowiedź. –
W glib jest tablica dynamiczna. (ale nie glibc) Sprawdź GArray i GPtrArray. Tablica dynamiczna nie jest jednak tak naprawdę jak połączona lista.
W każdym razie this to najbardziej przydatne źródło, jakie udało mi się znaleźć podczas nauki glib.
Można również użyć obstacks
Dang. Pełna implementacja. Wielkie dzięki epatel. –