# ifndef __cvector_h__
# define __cvector_h__
# include # include # include # define min_len 256
# define cvefailed -1
# define cvesuccess 0
# define cvepushback 1
# define cvepopback 2
# define cveinsert 3
# define cverm 4
# define expaned_val 1
# define redused_val 2
typedef void *citerator;
typedef struct _cvector *cvector;
# ifdef __cplusplus
extern "c"
# endif
#endif
#include "cvector.h"
#ifndef __gnu_linux__
#define __func__ "unknown"
#define inline __forceinline
#endif
//# define cwarning_iter(cv, iter, file, func, line) \
// do \
// } while (0)
struct _cvector
;
cvector cvector_create(const size_t size)
cv->cv_size = size;
cv->cv_tot_len = min_len;
cv->cv_len = 0;
return cv;
}
void cvector_destroy(const cvector cv)
size_t cvector_length(const cvector cv)
int cvector_pushback(const cvector cv, void *memb)
}
memcpy((char *)cv->cv_pdata + cv->cv_len * cv->cv_size, memb, cv->cv_size);
cv->cv_len++;
return cvesuccess;
}
int cvector_popback(const cvector cv, void *memb)
}
return cvesuccess;
}
size_t cvector_iter_at(const cvector cv, citerator iter)
int cvector_iter_val(const cvector cv, citerator iter, void *memb)
citerator cvector_begin(const cvector cv)
citerator cvector_end(const cvector cv)
static inline void cvmemove_foreward(const cvector cv, void *from, void *to)
static inline void cvmemove_backward(const cvector cv, void *from, void *to)
int cvector_insert(const cvector cv, citerator iter, void *memb)
}
cvmemove_foreward(cv, iter, (char *)cv->cv_pdata + cv->cv_len * cv->cv_size);
memcpy(iter, memb, cv->cv_size);
cv->cv_len++;
return cvesuccess;
}
int cvector_insert_at(const cvector cv, size_t index, void *memb)
else
return 0;
}
citerator cvector_next(const cvector cv, citerator iter)
int cvector_val(const cvector cv, citerator iter, void *memb)
int cvector_val_at(const cvector cv, size_t index, void *memb)
int cvector_rm(const cvector cv, citerator iter)
}
return cvesuccess;
}
int cvector_rm_at(const cvector cv, size_t index)
void cv_info(const cvector cv)
void cv_print(const cvector cv)
return;
}
typedef struct point
dpoint;
int main()
int a;
for(int i = 0; i < 10; i++)
cvector_destroy(cv);
return 0;
}
C語言實現動態陣列
include include 要使用malloc是要包含此標頭檔案 include 要使用memset是要包含此標頭檔案 intmain for i 0 i 列印陣列 free p 釋放記憶體,malloc和free一定要記得成組使用,不然會導致程式吃記憶體 getchar 讓程式停頓,觀察輸出 ...
動態陣列C語言實現
dynamicarray.h created on 2019年7月22日 author jarvis ifndef src dynamicarray h define src dynamicarray h 動態增長記憶體 策略 將資料放到堆上 動態陣列 如果5個元素 申請記憶體 拷貝資料 釋放記憶體...
C 動態陣列vector實現
最近在做將matlab 轉化為c c 的工作,在實際應用時,發現動態陣列非常重要,我在學習的時候也踩了許多坑,這篇就當做一篇踩坑筆記,希望讀者能夠繞開我踩過的坑,順利應用動態陣列。其實在c語言中,都是靜態陣列,即需要在定義的時候就定下該陣列的長度,然而這在實際的應用中,很大的一部分情況是我們並不知道...