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 根據...