Gibt es eine dynamic array Implementierung in glibc oder einer der Linux-Standardbibliotheken für C? Ich möchte in der Lage sein, zu einer Liste hinzuzufügen, ohne sich über ihre Größe Gedanken zu machen. Ich weiß, dass std :: vector für C++ existiert, aber ich brauche das C-Äquivalent.Gibt es eine automatische Größenanpassung Array/dynamische Array-Implementierung für C, die mit Glibc kommt?
Antwort
Ich denke, Sie denken an realloc. Aber es ist besser zu wickeln eine Liste in einer Struktur, den Überblick über seine aktuelle Länge API
Beispiel
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);
ich immer realloc für diesen Einsatz zu halten, könnten Sie Ihre eigenen Array-Funktionen um ihn herum wickeln. AFAIK, dafür gibt es keine anderen eingebauten Dinge.
Ich hatte gehofft zu vermeiden, das Rad neu zu erfinden. Schade. Ich bin mir sicher, dass das Wrapping, über das du redest, die ganze Zeit passiert. –
Vielleicht gibt es eine Bibliothek dafür, aber die meisten sind für C++ ... – schnaader
:-) Alles klar. Ich werde Realloc verwenden. Danke für die schnelle Antwort. –
Es gibt ein dynamisches Array in glib. (nicht Glibc obwohl) Überprüfen Sie GArray und GPtrArray. Ein dynamisches Array ist jedoch nicht wirklich dasselbe wie eine verknüpfte Liste.
Anyways this ist die nützlichste Ressource, die ich beim Lernen von glib finden konnte.
Sie können auch obstacks
Dang verwenden. Volle Implementierung auch. Vielen Dank Epatel. –