2 studying2 studying2 于 2016.09.11 21:05 提问

c++数组内存自动分配的问题

c++数组内存自动分配具体有哪些作用?
它可以随程序运行而扩大分配空间吗?

6个回答

hijack00
hijack00   Rxr 2016.09.11 21:34
已采纳

用new关键字申请的内存空间没有这种功能。
若使用STL中的容器(例如vector, list等等)可以自动管理存储空间,随着程序的运行,其分配空间会动态变化

zhongxiashuhan
zhongxiashuhan   2016.09.11 21:23

通俗点来说,动态数组主要适用于有些在运行期间才能确定内存大小的情况下,固定空间的数组适用于那些我们能编译期间就能确定大小的情况。

u011514451
u011514451   2016.09.12 11:17

STL里的容器会先分配一定量的内存,当不够时会重新分配之前内存x2的大小的内存容量,以此类推。如刚开始分配了32,不够时会重分64、128、256...

magengjie
magengjie   2016.09.20 16:17

#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++;

}

wzxq123
wzxq123   Rxr 2016.09.11 21:38

普通的数组是不能动态扩大内存的,但是可以用STL里面的相关容器。

qq_33220449
qq_33220449   2016.09.12 09:18

学习了,这个我也刚好不懂。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!