Có thực hiện dynamic array trong glibc hoặc bất kỳ thư viện Linux chuẩn nào cho C không? Tôi muốn có thể thêm vào danh sách mà không phải lo lắng về kích thước của nó. Tôi biết std :: vector tồn tại cho C + +, nhưng tôi cần C tương đương.Có khả năng tự động thay đổi kích thước mảng/mảng động cho C đi kèm với glibc không?
Trả lời
Tôi đoán bạn đang nghĩ đến realloc. Nhưng nó tốt hơn để quấn một danh sách trong một cấu trúc để theo dõi chiều dài hiện tại của nó
Ví dụ 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);
tôi luôn luôn sử dụng realloc cho điều này, bạn có thể bọc mảng chức năng của riêng bạn xung quanh nó. AFAIK, không có những thứ tích hợp khác cho việc này.
tôi đã hy vọng tránh tái phát minh ra bánh xe. xấu hổ làm sao. Tôi chắc chắn rằng các wrappering bạn đang nói về xảy ra tất cả các thời gian. –
Có lẽ có một số thư viện cho nó, nhưng hầu hết trong số đó là dành cho C++ ... – schnaader
:-) Được rồi. Tôi sẽ sử dụng realloc. Cảm ơn đã phản ứng nhanh chóng. –
Có một mảng động trong glib. (không glibc mặc dù) Kiểm tra GArray và GPtrArray. Một mảng động không thực sự giống như một danh sách liên kết.
Anyways this là tài nguyên hữu ích nhất mà tôi có thể tìm thấy khi học glib.
Bạn cũng có thể sử dụng obstacks
Dang. Thực hiện đầy đủ quá. Cảm ơn rất nhiều epatel. –