C語言實現 vector 動態陣列

2021-06-05 07:01:52 字數 3130 閱讀 4864

# 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語言中,都是靜態陣列,即需要在定義的時候就定下該陣列的長度,然而這在實際的應用中,很大的一部分情況是我們並不知道...