Esiste un'implementazione dynamic array in glibc o una qualsiasi delle librerie Linux standard per C? Voglio essere in grado di aggiungere a una lista senza preoccuparmi delle sue dimensioni. So che std :: vector esiste per C++, ma ho bisogno dell'equivalente C.Esiste un array di ridimensionamento automatico/implementazione di array dinamici per C che viene fornito con glibc?
risposta
Immagino che stiate pensando a realloc. Ma è meglio avvolgere un lista in una struttura per tenere traccia della sua lunghezza attuale
Esempio 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);
Io uso sempre realloc per questo, si potrebbe avvolgere le proprie funzioni di matrice intorno ad esso. AFAIK, non ci sono altre cose built-in per questo.
speravo di evitare di reinventare la ruota. che peccato. Sono sicuro che il wrappering di cui parli succeda sempre. –
Forse c'è qualche libreria per questo, ma la maggior parte di loro sono per C++ ... – schnaader
:-) Va bene. Userò realloc. Grazie per la risposta rapida. –
C'è una matrice dinamica in glib. (non glibc però) Controlla GArray e GPtrArray. Tuttavia, un array dinamico non è esattamente la stessa cosa di un elenco collegato.
In ogni caso this è la risorsa più utile che sia stata in grado di trovare durante l'apprendimento di glib.
È inoltre possibile utilizzare obstacks
Dang. Anche la piena implementazione. Grazie mille epatel. –