c++数组内存自动分配具体有哪些作用?
它可以随程序运行而扩大分配空间吗?
用new关键字申请的内存空间没有这种功能。
若使用STL中的容器(例如vector, list等等)可以自动管理存储空间,随着程序的运行,其分配空间会动态变化
通俗点来说,动态数组主要适用于有些在运行期间才能确定内存大小的情况下,固定空间的数组适用于那些我们能编译期间就能确定大小的情况。
普通的数组是不能动态扩大内存的,但是可以用STL里面的相关容器。
学习了,这个我也刚好不懂。
STL里的容器会先分配一定量的内存,当不够时会重新分配之前内存x2的大小的内存容量,以此类推。如刚开始分配了32,不够时会重分64、128、256...
#include "DynamicArray.h"
//初始化数组
DynamicArray Init_DynamicArray(){
DArray* darray = malloc(sizeof(DArray));
if (darray == NULL){
return NULL;
}
darray->capacity = 5; //初始化容量5
darray->size = 0;
darray->address = (void**)malloc(sizeof(void*) * darray->capacity);
return darray;
}
//指定位置插入
void Insert_DynamicArray(DynamicArray darray, int pos, void* data){
if (darray == NULL){
return;
}
if (data == NULL){
return;
}
DArray* arr = (DArray*)darray;
//判断空间是否足够
if (arr->size == arr->capacity){
int newcapacity = arr->capacity * 2; //两倍空间扩展
//申请空间
void** newspace = (void**)malloc(sizeof(void*) * newcapacity);
//拷贝原空间数据到新空间
memcpy(newspace,arr->address,sizeof(void*) * arr->capacity);
//释放旧空间
free(arr->address);
arr->address = newspace;
arr->capacity = newcapacity;
}
//判断位置是否有效,如果pos越界,调整为在尾部插入
if (pos < 0 || pos > arr->size){
pos = arr->size;
}
//移动元素
int i = arr->size - 1;
for (; i >= pos;i--){
arr->address[i + 1] = arr->address[i];
}
arr->address[pos] = data;
arr->size++;
}