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

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

1

6个回答

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

2

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

2

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

1

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

}

1

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

0

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

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言用数组方法解决约瑟夫环问题
这个题我是用数组下标置0方法做的,类似单链表的性质,这个方法是模拟了游戏过程,是比较笨的代码,喜欢研究的朋友可以用相关算法来实现。时间复杂度为O(n^2),代码注释很详细,基本每一行我都写了注释,稍微有点基础的就可以看的懂
EXCEL使用内存数组实现多重筛选
在EXCEL中,要用公式实现多重条件筛选是较困难的事,本示例是结合内存数组的使用,实现了轻松筛选,当然对VBA高手来说,运用VBA+SQL语句可能更容易一些,不过达不到动态的显示效果.
LOOKUP函数处理内存数组
LOOKUP函数处理内存数组,LOOKUP高级应用.
C/C++自动分配和回收内存
根据生命周期结束后可以自动释放内存.严格来说是可以说半自动回收,个人原编,希望对大家有用,反正我是用的挺爽,创建内存方面,内存回收也干净.
C语言实验报告——数组
1.编程实现:对任意一个一维数组,从中找出数组元素的最大值和最小值。 2.编程实现:在给定的字符串中查找满足条件的第一个字符。 3.编程实现:首先任意输入一个大于2且小于10的整数n,再输入一个由n决定的二维整型数组(n n),形成n n阶矩阵,将矩阵中最大元素所在的行和最小元素所在的行对调后,再输出该矩阵(注意:数组不允许动态定义)。 4.编程实现“折半查找”的过程。折半查找的处理过程是:在一个数据已排好序的数组中,首先比较关键字与数组中间的元素,如果两者相等,则查找结束;如果前者比后者小,则要查找的数据必然在数组的前半部,此后只需在数组的前半部中继续折半查找;如果前者的数值比后者大,则要查找的数据必然在数组的后半部,此后只需在数组的后半部继续进行折半查找。 5.编程实现:三个学生、五门课程的成绩分别存放在4×6矩阵的前3×5列,计算出每个学生的平均成绩存放在该数组的最后一列的对应行上。计算单科的成绩总和存放在最后一行的对应列上,并输出单科成绩的平均分。 6.编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr()用于统计一个字符串的长度。编写函数cmpStr()用于判断两个字符串的大小。
四大湖的逻辑推理问题
可以设洞庭湖、洪泽湖、鄱阳湖、太湖分别用变量A、B、C、D表示。每个变量的取值是1~4。 因为每个只答对了一个
猴子吃桃问题的数组,链表,递归三种求解方法
有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子?要求: (1)采用数组数据结构实现上述求解 (2)采用链数据结构实现上述求解 (3)采用递归实现上述求解
利用libjpeg库解码内存中的jpeg数据范例
利用libjpeg库解码内存中的jpeg数据范例,详情请参考http://blog.csdn.net/weixinhum/article/details/43089047
双向列表实现队列程序
通过双向列表实现自动分配释放内存,初始化消息队列,入队,出队,释放消息队列内存。
内存数组做统计专题图
示例演示了使用多次查询和复杂计算的结果、数组、XML文件之类数据做统计专题图
基于RSA加密的点对点聊天程序 C#
基于RSA加密的聊天程序,程序既是客户端又是服务器,指定IP后,选择接受即可进行通信。同时显示发送密文、接收到的密文、密文解析后的聊天记录,密钥文件可重新生成,还具有文件传输功能。压缩包内包含全部工程文件,用VS2008可直接运行。已进行过单机试验和局域网内两机试验,没有错误。
约瑟夫问题数组方法解决
用数组方法解决约瑟夫问题 用数组方法解决约瑟夫问题
有重复元素的全排列问题
设计和实现带有重复元素的全排列问题,并输出所有的排列情况。
动态申请二维数组
在C语言中,申请一般数组时,数组大小必须是常量。那么我们如何动态申请数组内存呢?
检查堆内存 踩内存,内存重复释放 内存泄露的小程序
功能说明: 检查堆内存的问题,定位到文件,行数 1. 踩内存 2. 内存重复释放 3. 内存泄露 使用方法用 dbg_malloc, dbg_free 替换原程序中的malloc, free. 适当的时候调用dbg_memory_check 以检查内存泄露。 原理: 在申请的内存前后添加 隔离带,并做记录。在free, dbg_memory_check中检查踩内存。在free中检查重复释放。 假设要申请的为 size ,则实际申请的为 size + gap_size (前后隔离带的大小) GAP_BEGIN | size | GAP_END PS: 此文件可酌情修改,以适应不同的设备,平台等。 多线程情况下,请对dbg_malloc_ dbg_free_ dbg_memory_check 加锁
c语言实现分治算法求解最大子数组
自己写的分治算法,也包括了暴力求解的部分,并比较两者的运行时间,输出最大子数组的起始位置
DNS自动被修改
本地连接网络DNS自动被修改的原因以及解决方法。。
C语言数组PPT
简单详尽的C语言数组学习,让你更快解决C语言中数组问题。
javascript 数组内存释放
javascript 数组内存释放
自动分配位置的问题
用的是visual studio 2005
约瑟夫环代码 c语言约瑟夫
约瑟夫环(Joseph)问题的一种描述是:编号为1、2、3……n的n个人按照顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按照顺时针的方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。
读者写者问题 C语言实现
用c语言实现的读者写者问题 思路清晰 代码简单
java用数组实现约瑟夫环
java用数组实现的约瑟夫环问题。代码简单易懂。
利用数组实现猴子选大王问题 C++
利用数组实现猴子选大王问题 输入猴子的个数以及报的数得出大王的编号
操作系统 内存分配与回收 C语言模拟(含源代码和.exe文件)
操作系统内存分配与回收C语言模拟。包含源代码和.exe可执行文件
将内存中的正数和负数分开的汇编语言程序
将内存中某数据块中的正数和负数分开,并在屏幕上显示正数和负数的个数
c编写的一些程序按行优先顺序列出四维数组A[2][3][2][3]所有元素在内存中存储次序.c
按行优先顺序列出四维数组A[2][3][2][3]所有元素在内存中存储次序
C专家编程 高清pdf
本书撷取了几十个实例,细致、深入地讲解了C的历史、语言特性、声明、数组、指针、链接、运行时、内存以及分析了如何进一步学习C++等问题。
C专家编程 英文版 Expert C Programming
书中C的历史、语言特性、声明、数组、指直、链接、运行时、内存以及如何进一步学习C++等问题进行了细致的讲解和深入的分析。
用C遍历内存
闲来无事想写个,,遍历内存的代码,本来想着用指向指针的指针通过改变二级指针的大小来遍历,但没考虑到内存保护机制,出现段错误,于是在网上搜索了一番,然后经过自己的加工得到……
C语言数组的增删
数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
飞机座位管理系统
因为是c语言大作业,写的不是很详细,需要的朋友选择性下载
众数问题的C语言
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。
C语言读取文件数据,写入内存
作为一个新手学习C语言读写数据,我整合了一下自己查找的一些资料,用C语言实现将一个文件读入内存中,里面有运行工具,和一个word文档代码。
labview 清空内存
在labview程序运行过程中,内存会消耗越来越多,如果不及时清理,导致程序越来越慢,该方法是调用一个内存清空的dll。每调用一次就会将系统内存清空一次。
c语言数组练习题及答案
这东西对基础不扎实的同学最好,基础好的也可以来看看
C语言整数输入的数组实现
自己写的整数输入的代码,不使用指针使用数组,调试比较完善
自动分配传送带PLC梯形图
自动分配传送带PLC梯形图!自动分配传送带PLC梯形图!自动分配传送带PLC梯形图!自动分配传送带PLC梯形图!
C语言实验报告(数组(一))
求一组数据的平均分,以及对一组给定数据进行逆序输出。
迷宫问题的算法(用数组实现)
迷宫问题的求解算法,数据结构中的难点题目,用c语言实现的,源代码经过VC调式通过,没错误,用数组实现的。
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 区块链问题 ios视频开发问题