动态数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。

1.变长一维数组

实现变长数组最简单的是变长一维数组,你可以这样做:

//文件名:array01.cpp#include<iostream>
using namespace std;
int main(){
int len;
cin>>len;//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间int*p=new int[len];...........delete[]p;
return0;
}

注意int*p=newint[len];这一句,你不能这样做:int p[len];C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。

而且这样也不行:
int p[]=new int[len];

编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int*p=new int[len];

array01.cpp实现了一个变长的一维数组,但是要养成一个好习惯,就是注意要注销指针p,使程序释放用new开辟的内存空间。

当然使用C++标准模版库(STL)中的vector(向量)也可以实现变长数组:

//文件名:array02.cpp#include<iostream>
#include<vector>
using namespace std;int main(){int  len;
cin>>len;
vector<int>array(len);//声明变长数组
for(int i=0;i<len;i++)
array[i]=i;
cout<<array[i]<<"\t";
}return0;
}

2.动态指针数组

在构造函数中分配空间:
arr = new TYPE*[size];
for(int k=0; k<size;k++)arr[k] = new TYPE;
在析构函数中回收资源:
for(int k=0;k<size; k++)delete arr[k];
delete []arr; 再来一个示例:
#include <iostream>
using namespace std;
int main()
{int ** arr;arr = new int* [3];for (int k=0; k<3; k++){arr[k] = new int;cin>>*arr[k];  }for (int k=0; k<3; k++)cout<<*arr[k]<<" ";cout<<endl;for (int k=0; k<3; k++)delete arr[k];delete []arr;return 0;
}

转载于:https://blog.51cto.com/zhuxianzhong/1531776

C++动态数组再总结相关推荐

  1. C专家编程 第10章 再论指针 10.7 使用指针创建和使用动态数组

    使用指针创建和使用动态数组     当预先并不知道数据的长度时,可以使用动态数组.绝大多数具有数组的编程语言都能够在运行时设置数组的长度.它们允许程序员计算需要处理的元素的数目,然后创建一个刚好能容纳 ...

  2. vector 容器 动态数组总结

    vector 容器 动态数组总结 二话不说直接上代码 #include <vector> #include <algorithm> #include <iostream& ...

  3. 维度及长度均可任意变形的动态数组

    一.维度及长度均可任意变形的动态数组概述 收藏     近日,有同事需要设计一个可自由变形的多维数组,苦思数日,不得其解,求助于我.于是我帮他写了一个可自由改变维度及长度的数组ADT.后来想,网上应该 ...

  4. sv队列和动态数组的区别_systemverilog学习(4)动态数组

    本节主要内容:动态数组,队列,联合数组,数组基本操作,结构体类型,枚举类型 一:动态数组 1:基础 在run-time才知道元素个数,在compile-time不知道 可以在仿真的时候再确定元素个数 ...

  5. unique函数_Office 365函数新世界:动态数组

    我们今天分享的是FILTER函数,她完美展现了365函数世界动态数组的理念:运算高效.公式简洁.还可以作为中转表的性质用于其它函数二次计算.基础语法在日常数据处理中,我们经常会遇到一对多式的数据查询问 ...

  6. 静态数组和动态数组 内存分布

    数组是程序设计中是一个非常重要的概念.数组是一个用于收集大量类似数据的容器, 以及其每一个元素能被相同处理过程迭代来处理的一个抽象体. 创建数组一般有三种方式:全局/静态范围的数组,局部变量数组,申请 ...

  7. 研一寒假02-指针_new分配内存_使用new来创建动态数组_使用动态数组_使用delete来释放new分配的内存...

    #---------------------------------指针-----------------------------------# #include <iostream> i ...

  8. sv队列和动态数组的区别_Go 刷 LeetCode 系列:经典(7) 设计双端队列

    设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k.insertFront():将一个元素添加到双端队列头部.如果操作成功返回 true ...

  9. C语言动态数组建立方法

    动态数组是指在声明时没有确定数组大小的数组,即忽略圆括号中的下标:当要用它时,可随时用ReDim语句(C语言中用malloc语句)重新指出数组的大小.使用动态数组的优点是可以根据用户需要,有效利用存储 ...

最新文章

  1. 哈佛博士生教你轻松愉快地读博
  2. mongo 多条件筛选_如何制作提交按钮,实现多条件筛选
  3. ALGO-1 区间k大数查询
  4. 【机器视觉】 while算子
  5. 不想写脚本清理 mongodb 中的垃圾数据,ttlIndex 能帮到你!
  6. ios下使用rsa算法与php进行加解密通讯
  7. 机器学习图像源代码_使用带有代码的机器学习进行快速房地产图像分类
  8. 织梦留言板guestbook.htm加入头部导航
  9. LeetCode 832. 翻转图像(异或^)
  10. 4月17日鸿蒙开发者大会,4月17日这天,将载入华为史册
  11. python requests session刷新_Python Requests Session set-cookie不生效的坑
  12. 关于Python中的错误与异常,你是否了解的够仔细?
  13. (28)FPGA面试技能提升篇(SATA接口)
  14. c语言链表版百度云,链表详解(C语言版)
  15. 基于阿里云服务器+wordpress构建自己的网站(全过程系列,无需任何编程知识)
  16. 使用PacketSifter从pcap中筛选有价值的信息
  17. 最小配筋率、配筋率、超筋率定义与分析
  18. 【三星笔试】给定一些汽油E,给定一段距离D,完成D这段距离...
  19. 2022年起重机械指挥考试题库及模拟考试
  20. 新手平面设计师如何在网上接单赚钱?

热门文章

  1. 数值分析上机题matlab线性方程组,数值分析上机实验报告 - 线性方程组部分实验题1...
  2. oracle 游标 内联,oracle – EXEC_SQL,EXECUTE IMMEDIATE,DBMS_SQL和内联SQL之间的区别
  3. 功能测试Bug频发?测试工作中这点不可忽略
  4. mysql批量insert bug_MySQL Bug insert into on duplicate key update 语法更新 text blob 大字段导致 MySQL crash...
  5. numpy维度交换_numpy之转置(transpose)和轴对换
  6. 安卓okhttp上传jason和图片_微信图片总是「已过期或被清理」?简单 3 招,可摆脱烦恼...
  7. php面对对象设计,PHP对象与设计
  8. g++ linux 编译开栈_使用 linux kernel +busybox 定制linux系统
  9. 股票自动交易python下单接口_用 Python 写了个简单的股票量化交易框架
  10. 利用结构体输入输出员工信息