studying2
2016-09-11 13:05
采纳率: 90.9%
浏览 1.6k

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

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • hijack00 2016-09-11 13:34
    已采纳

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

    已采纳该答案
    打赏 评论
  • 仲夏淑涵 2016-09-11 13:23

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

    打赏 评论
  • 尚书左仆射 2016-09-11 13:38

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

    打赏 评论
  • 细水长流- 2016-09-12 01:18

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

    打赏 评论
  • hpu刘 2016-09-12 03:17

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

    打赏 评论
  • gedg33 2016-09-20 08: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++;
    

    }

    打赏 评论

相关推荐 更多相似问题