2009-02-22 6 views

risposta

9

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); 
+0

Dang. Anche la piena implementazione. Grazie mille epatel. –

1

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.

+0

speravo di evitare di reinventare la ruota. che peccato. Sono sicuro che il wrappering di cui parli succeda sempre. –

+1

Forse c'è qualche libreria per questo, ma la maggior parte di loro sono per C++ ... – schnaader

+0

:-) Va bene. Userò realloc. Grazie per la risposta rapida. –

4

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.

Problemi correlati