動態陣列的設計

2021-08-13 05:41:23 字數 2363 閱讀 6515

array_vector.h

#ifndef _array_vector_

#define _array_vector_ //防止重複包含

/* c/c++裡面記憶體到底可以分配在那些位置?

1:引數 區域性變數 分配在棧上

2:靜態變數 全域性變數 分配在資料段上

3:使用malloc free new delete在執行期間像作業系統申請的記憶體,然後不用了,又釋放記憶體,為堆上的記憶體

int a[常量大小]:

//缺點

1:只能分配在棧上,或定義為全域性變數

2:一旦定義後,資料的元素個數再也無法改變

//優點

按索引來存放資料,方便使用和查詢 (索引從0開始)

動態陣列:

1:具備陣列的訪問優點,可以通過索引來獲取裡面的值

2:可以擴充陣列的容量,當需要存放的資料元素超過容量的時候,可以擴容

3:動態陣列的記憶體 分配在堆上

*/struct array_vector

;//初始化我們的結構體,指定讓他來儲存哪種資料型別

void vector_define(struct array_vector* v, int sizeof_elem);

void vector_clear(struct array_vector* v); //清除動態陣列所占用的資源

//將我們的元素的資料,放到我們的動態陣列的後面

void vector_push_back(struct array_vector* v, void* elem_ptr, int sizeof_elem);

void vector_push_at(struct array_vector* v, int index);

//陣列存放的元素個數

int vector_size(struct array_vector* v);

void* vector_index(struct array_vector* v, int index);

void* vector_begin(struct array_vector* v);

//彈出元素

void vector_pop_back(struct array_vector* v);

void vector_pop_all(struct array_vector* v); //彈出所有元素,但是不釋放記憶體,釋放內存在clear裡面

void vector_eraise(struct array_vector* v,int index);

#endif

array_vector.cpp

#include #include #include #include #include "array_vector.h"

#define my_malloc malloc

#define my_free free

#define my_realloc realloc

void vector_define(array_vector * v, int sizeof_elem)

void vector_clear(array_vector * v)

}#define extend_step 16

void vector_push_back(struct array_vector* v, void* elem_ptr, int sizeof_elem)

if (v->max_elem <= v->elem_count)

unsigned char* dst = v->mem_ptr + v->sizeof_elem * v->elem_count;

memcpy(dst, elem_ptr, v->sizeof_elem);

v->elem_count++; //多存放了乙個資料

}int vector_size(struct array_vector* v)

void* vector_index(struct array_vector* v, int index)

void* vector_begin(struct array_vector* v)

void vector_pop_all(struct array_vector* v)

main.cpp

#include#include#include#include "array_vector.h"

int main(int argc, char **argv)

vector_clear(&vec_int);

system("pause");

return 0;

}

陣列與動態陣列的區別

眾所周知,陣列的長度是不可變的,那麼為什麼動態陣列長度可隨意更改呢?這個要從記憶體中的資料模型開始講了 陣列每乙個元素型別都是統一的,且連續不間斷的。如果將記憶體想象成乙個賓館,你在預定賓館時,同行只有4個人,讓賓館服務員尋找了個4個連續的包間,且已經入住。因為賓館可能會有客人預定包間。當你再次有朋...

動態陣列的實現

靜態陣列 編譯階段確定陣列的大小,執行階段不能改變陣列大小。缺點是事先無法準確確定陣列的大小,太小不滿足處理需要,太大浪費記憶體空間。動態陣列 執行階段,根據實際需要動態確定陣列的大小。在 c 語言中,可利用記憶體的申請和釋放庫函式,c語言培訓班 以及指向陣列的指標變數可當陣列名使用的特點,來實現動...

動態陣列的實現

include dynamicarray.h 動態陣列初始化 dynamic array init array 插入 void push back array dynamic array arr,int value 插入新元素 arr paddr arr size value arr size 根據...