2009-02-22 10 views
13

क्या dynamic array ग्लिब में कार्यान्वयन या सी के लिए मानक लिनक्स पुस्तकालयों में से कोई है? मैं इसके आकार के बारे में चिंता किए बिना एक सूची में जोड़ने में सक्षम होना चाहता हूं। मुझे पता है कि std :: वेक्टर सी ++ के लिए मौजूद है, लेकिन मुझे सी समकक्ष की आवश्यकता है।क्या सी के लिए एक ऑटो-आकार बदलने वाला सरणी/गतिशील सरणी कार्यान्वयन है जो ग्लिब के साथ आता है?

उत्तर

9

मुझे लगता है कि आप 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); 
+0

डैंग का भी उपयोग कर सकते हैं। पूर्ण कार्यान्वयन भी। बहुत बहुत epatel धन्यवाद। –

1

एक संरचना में एक सूची रैप करने के लिए मैं हमेशा इस बात के लिए realloc उपयोग करते हैं, आप इसे चारों ओर अपनी खुद की सरणी कार्यों लपेट सकता है। AFAIK, इसके लिए कोई अन्य अंतर्निहित चीजें नहीं हैं।

+0

मैं पहिया को फिर से आविष्कार से बचने की उम्मीद कर रहा था। शर्म की बात है। मुझे यकीन है कि आप जिस रैपरिंग के बारे में बात कर रहे हैं वह हर समय होता है। –

+1

शायद इसके लिए कुछ लाइब्रेरी है, लेकिन उनमें से अधिकांश सी ++ के लिए हैं ... – schnaader

+0

:-) ठीक है। मैं realloc का उपयोग करेंगे। शीघ्र जवाब देने के लिए ध्न्यवाद। –

4

ग्लिब में एक गतिशील सरणी है। (हालांकि glibc नहीं) GArray और GPtrArray देखें। एक गतिशील सरणी वास्तव में एक लिंक्ड सूची के समान नहीं है।

वैसे भी this सबसे उपयोगी संसाधन है जिसे मैं ग्लिब सीखते समय ढूंढने में सक्षम हूं।