c++动态数组的优点,创建和删除
动态数组可以有两种使用方式:
1:不能预先知道数组的大小使用动态数组
传统数组(静态数组)是需要在程序运行前,就指定大小,比如说
int i = 10;
int a[i];
这种就是不合法的。
因为函数栈的要求,就是在函数运行前,分配好所有变量的空间,i是不定的,所以不能再运行前,就分配好空间。
但是大多数情况,我们并不能预先知道数组的大小的。
所以我们使用动态数组
int *a = new int[i];
这个语句就可以在执行的时候,才分配空间,是合法的。
2:大数组存储时栈区是有大小限制
传统数组是存放在栈区的,栈区是有大小限制的,如果你申请了一个大于2M的数组,程序就会报错……
但是动态数组是在堆空间的,理论上,内存有多大,就可以申请多大的数组。
在vc中栈默认是1M;有时创建一个a[1000000000]甚至更长的数组时栈会不够用,与此同时,即使数组不是太大,例如a[1000000],一次申请连续的数组会造成资源的浪费,并且可能因为很多因素内存的分配不能进行,而得不到内存。所以动态数组可以最大的限度节省内存空间。
一维动态数组的创建和删除
int *p = 0;
p = new int[10];//创建
delete [] p;
二维动态数组的创建和删除,以创建一个二维矩阵为例
double **data =0;//定义一个二维的指针
data = new double *[rsize]; //创建矩阵的行
for (int i = 0; i < rsize; i++)
{
data[i] = new double[csize]; //data[i] 此时是指针,创建矩阵的列
}
for (int i = 0; i < rsize; i++)
for (int j = 0; j < csize; j++)
data[i][j] = 0; //初始化
/*****二维动态数组删除****/
for (int i = 0; i < y; ++i)
{
delete p[i];//释放内存。
p[i] = NULL;//释放空间后将p[i]指向NULL值,
}
delete []p;
p = NULL;
new出来的数组它的逻辑地址(虚拟地址)是连续的,所以可以用遍历来读取,但物理地址是不一定的(因为要大数组存储,这个是操作系统的事情,用户不用关心)。
c++动态数组的优点,创建和删除的更多相关文章
- vc++基础班[28]---动态数组及动态链表的讲解
C++中也有相应的动态数组.动态链表.映射表的模板类,就是STL中的:vector.list.map 他们属于C++标准中的一部分,对于程序的移植性来说也是不错的,但是在MFC编程中使用 CArray ...
- [UE4]C 语言动态数组
在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定.对于这种问题,用静态数组的办法很难解决.为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数结合指 ...
- [转]delphi 删除动态数组的指定元素
type TArr = array of TPoint; {把数组先定义成一个类型会方便许多, 这里仅用 TPoint 测试} {删除动态数组指定元素的过程: 参数 arr 是数组名, 参数 Inde ...
- js动态创建表格,删除行列的小例子
js动态创建表格,删除行列的实例代码. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...
- 容器(vector)、数组、new创建的动态数组,你到底用哪一个(执行效率分析)
1.问题的提出 在没有了解vector之前,动态数组一般都是又new创建的.在了解vector后发现vector竟是那样方便好用,但方便的同时却是以牺牲执行效率为代价的.网上对vector和array ...
- WPF 中动态创建和删除控件
原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件) //注册控件 2.容器控件.FindName(" ...
- 一篇文章让你了解动态数组的数据结构的实现过程(Java 实现)
目录 数组基础简单回顾 二次封装数组类设计 基本设计 向数组中添加元素 在数组中查询元素和修改元素 数组中的包含.搜索和删除元素 使用泛型使该类更加通用(能够存放 "任意" 数据类 ...
- [数据结构1.2-线性表] 动态数组ArrayList(.NET源码学习)
[数据结构1.2-线性表] 动态数组ArrayList(.NET源码学习) 在C#中,存在常见的九种集合类型:动态数组ArrayList.列表List.排序列表SortedList.哈希表HashTa ...
- C++之动态数组
C99支持一种名为变长数组的结构来方便程序员.C++也提供了一种长度可在程序运行时确定的数组类型:动态数组.声明格式为:(声明 int 类型的数组) ; //此处可修改 ArraySize 的值 in ...
随机推荐
- foobox更新日志
2020-1-31, 6.1.5.1a 版(*) 跟进汉化版修正.(*) MusicTag升级到 1.0.4.0.(*) 部分图标改良,其他优化和修正.(+) 丰富网络功能,增加一个搜索源,一个榜单源 ...
- Scikit-Learn 源码研读 (第二期)基类的实现细节
目录 BaseEstimator `get_params` `set_params` ClassifierMixin RegressorMixin 检查传入的对象 检查样本数和权重系数 实现$R^2$ ...
- Python3学习之路~10.3 论事件驱动与异步IO
论事件驱动----详见:https://www.cnblogs.com/alex3714/articles/5248247.html Select\Poll\Epoll异步IO----详见:http: ...
- Git在公司内部的使用规范
Git在公司内部的使用规范 目录 Git在公司内部的使用规范 1.版本定义 2.系统开发环境 3. 分支定义 4.Commit 日志规范 5.开发工作流程: 5.1.常规分支debug流程: 5.2. ...
- 记录一次云主机部署openstack的血泪史
看见这个部署成功的留下了激动的泪水 经过长时间的BUG苦肝终于成功部署成功 部署的环境2vCPU 8GB 阿里云主机,部署成功以后内存占用确实蛮高的 记录这一次踩坑,给后来者避免踩坑时间,个人踩坑踩 ...
- Github搜索技巧整理
Github官方网址:https://github.com/ 一.详细官方文档:https://help.github.com/en/github/searching-for-information- ...
- 【2019多校第一场补题 / HDU6582】2019多校第一场E题1005Path——最短路径+网络流
HDU6582链接 题意 在一张有向图中,有一个起点和一个终点,你需要删去部分路径,使得起点到终点的最短距离增加(并不要求需要使得距离变成最大值),且删除的路径长度最短.求删去的路径总长为多少 分析 ...
- java接口自动化(二) - 接口测试的用例设计
1.简介 在这篇文章里,我们来学习一下接口测试用例设计,主要是来学习一些用例设计要点.其实说白了,接口用例设计和功能用例设计差不多,照猫画虎即可.不要把它想象的多么高大上,多么的难,其实一样,以前怎么 ...
- 构建安全可靠的微服务 | Nacos 在颜铺 SaaS 平台的应用实践
作者 | 殷铭 颜铺科技架构师 本文整理自架构师成长系列 3 月 19 日直播课程. 关注"阿里巴巴云原生"公众号,回复 "319",即可获取对应直播回放链接 ...
- Ubuntu 安装 tensorflow-gpu 1.4 包含 CUDA 8.0 和cuDNN
硬件环境:NVIDIA GTX 980 Ti 系统环境:Ubuntu 16.04 64位 一.安装 NVIDIA驱动 关闭 Secure Boot 具体如何禁用 BIOS 中的 Secure Boot ...