动态数组_笔记
.h
typedef struct DynamicArray {int *pAddr; //數組首地址int size; //當前元素數量int Capacity; //最大容量}Darr;class Darray { public:Darr* array; public://初始化Darr* Init();//插入void Push_Back(Darr* array, int value);//根據位置刪除void Remove_pos(Darr* array, int pos);//根據值刪除void Remove_value(Darr* array, int value);//查找int Find_array(Darr* array, int value);//打印void print_array(Darr* array);//獲取動態數組容量int Capacity_array(Darr* array);//獲取動態數組當前元素個數int Size_array(Darr* array);//根據位置獲取某個位置的元素int At_array(Darr* array, int pos);//清空數組void Clear_array(Darr* array);//釋放動態數組內存void Delete(Darr* array); };.cpp
//初始化 Darr* Darray::Init() {//申請內存Darr* myArray = new Darr;//初始化myArray->size = 0;myArray->Capacity = 20;myArray->pAddr = new int[myArray->Capacity];return myArray; }//插入 void Darray::Push_Back(Darr* array, int value) {if (array == NULL)return;//判斷空間是否足夠if (array->Capacity == array->size){//申請兩倍空間int * newSpace = new int[array->Capacity * 2];//將舊空間數據拷貝到新空間memcpy(newSpace, array->pAddr,array->Capacity * sizeof(int));//釋放舊空間內存delete[] array->pAddr;//更新容量array->Capacity = array->Capacity * 2;array->pAddr = newSpace;}//插入新元素array->pAddr[array->size] = value;array->size++;}//根據位置刪除 void Darray::Remove_pos(Darr* array, int pos) {if (array == NULL)return;//判斷位置是否有效if (pos<0 || pos>=array->size)return;//刪除for (size_t i = pos; i < array->size -1; i++){array->pAddr[i] = array->pAddr[i + 1];}array->size--;}//根據值刪除 void Darray::Remove_value(Darr* array, int value) {if (array == NULL)return;//找到值的位置int pos = Find_array(array, value);//根據位置刪除Remove_pos(array,pos); }//查找相同的值,返回所在的位置,沒有找到返回-1 int Darray::Find_array(Darr* array, int value) {if (array == NULL)return NULL;//找到值的位置int pos = -1;for (size_t i = 0; i < array->size; i++){if (array->pAddr[i] == value){pos = i;break;}}return pos; }//打印 void Darray::print_array(Darr* array) {for (size_t i = 0; i < array->size; i++){cout << array->pAddr[i]<<" ";}cout << endl;}//獲取動態數組容量 int Darray::Capacity_array(Darr* array) {if (array == NULL)return 0;return array->Capacity; }//獲取動態數組當前元素個數 int Darray::Size_array(Darr* array) {if (array == NULL)return 0;return array->size; }//根據位置獲取某個位置的元素 int Darray::At_array(Darr* array, int pos) {if (array == NULL)return 0;return array->pAddr[pos]; }//清空數組 void Darray::Clear_array(Darr* array) {if (array == NULL)return;array->pAddr = 0;}//釋放動態數組內存 void Darray::Delete(Darr* array) {if (array == NULL)return;if (array->pAddr != NULL)delete[] array->pAddr;delete array; }測試
int main() {Darray myArray;//初始化動態數組myArray.array = myArray.Init();cout << "數組容量:" << myArray.Capacity_array(myArray.array)<<endl;cout << "數組大小:" << myArray.Size_array(myArray.array) << endl;//插入元素for (int i= 0;i<30;i++){myArray.Push_Back(myArray.array,i);}cout << "數組容量:" << myArray.Capacity_array(myArray.array) << endl;cout << "數組大小:" << myArray.Size_array(myArray.array) << endl;//打印myArray.print_array(myArray.array);//刪除myArray.Remove_value(myArray.array,0);//打印myArray.print_array(myArray.array);//查找int pos = myArray.Find_array(myArray.array,6);cout<<"位置6的值:" << pos << endl;//銷毀myArray.Delete(myArray.array);return 0; }總結