刚刚开始学动态内存,很多地方不明白
DynamicArray* DynamicArray_new()
{
DynamicArray* temp = (DynamicArray*)malloc(sizeof(DynamicArray));
temp->capacity = 16;
temp->size = 0;
temp->data = (int*)malloc(sizeof(int) * 16);
return temp;
}
void DynamicArray_insert(DynamicArray* This, size_t pos, const Elem* v)
{
if (This->size + 1 >= This->capacity)
{
int* temp = (int*)malloc(sizeof(int) * This->size);
for (int i = 0; i < This->size; i++)
{
temp[i] = This->data[i];
}
//free(This->data);
This->data = (int*)malloc(sizeof(int) * This->capacity * 2);
This->capacity *= 2;
for (int i = 0; i < This->size; i++)
{
This->data[i] = temp[i];
}
}
int i = This->size - 1;
int Pos = pos;
while(i >= Pos)
{
This->data[i + 1] = This->data[i];
i--;
}
This->size++;
This->data[Pos] = *v;
}
Elem DynamicArray_erase(DynamicArray* This, size_t pos)
{
This->size--;
int Temp = This->data[pos];
for (int i = pos; i < This->size; i++)
{
This->data[i] = This->data[i + 1];
}
if (This->capacity > 16 && This->size < ((This->capacity) / 4))
{
int *temp = (int*)malloc(sizeof(int) * This->size);
for(int i = 0;i < This->size;i++)
temp[i] = This->data[i];
//free(This->data);
This->data = (int*)malloc(sizeof(int) * This->capacity / 4);
for(int i = 0;i < This->size;i++)
{
This->data[i] = temp[i];
}
This->capacity /= 4;
}
return Temp;
}
Elem DynamicArray_get(const DynamicArray* This, size_t pos)
{
return This->data[pos];
}
void DynamicArray_set(DynamicArray* This, size_t pos, const Elem* v)
{
This->data[pos] = *v;
}
size_t DynamicArray_capacity(const DynamicArray* This)
{
size_t T = This->capacity;
return T;
}
size_t DynamicArray_size(const DynamicArray* This)
{
size_t T = This->size;
return T;
}
bool DynamicArray_empty(const DynamicArray* This)
{
if (This->size == 0)
return true;
else
return false;
}
void DynamicArray_resize(DynamicArray* This, size_t new_size)
{
int Size = This->size;
This->size = new_size;
if(This->size >= This->capacity)
{
int *temp = (int*)malloc(sizeof(int) * This->size);
for(int i = 0;i < This->size;i++)
{
temp[i] = This->data[i];
}
//free(This->data);
This->data = (int*)malloc(sizeof(int) * This->capacity * 2);
This->capacity *= 2;
for(int i = 0;i < Size;i++)
This->data[i] = temp[i];
return ;
}
else if(This->size < This->capacity / 4 && This->capacity > 16)
{
int *temp = (int*)malloc(sizeof(int) * This->size);
for(int i = 0;i < This->size;i++)
{
temp[i] = This->data[i];
}
//free(This->data);
while(This->size < This->capacity && This->capacity > 16)
This->capacity /= 2;
This->data = (int*)malloc(sizeof(int) * This->capacity);
for(int i = 0;i < Size;i++)
This->data[i] = temp[i];
return ;
}
int* a = (int*)malloc(sizeof(int) * This->size);
for (int i = 0; i < This->size; i++)
{
a[i] = This->data[i];
}
//free(This->data);
This->data = (int*)malloc(sizeof(int) * This->capacity);
for(int i = 0;i < Size;i++)
{
This->data[i] = a[i];
}
}
void DynamicArray_delete(DynamicArray* This)
{
This->size = 0;
This->capacity = 0;
//free(This->data);
}