.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;
}