目录

1.摘要

2.动态数组内存分配

1一维数组

2多维数组(以2维为例)

3.动态数组初始化

1默认初始化

2.自定义初始化

4.动态数组释放

5.例子 Gradebook类的实现

6.参考文章


1.摘要

数组是一种顺序存储的数据结构,在定义数组时,首先要确定数组的大小。静态数组在编译时就需要确定数组的大小,所以,为了防止内存溢出,我们尽量将数组定义的大一些,但是这样太过浪费内存。

动态数组则不同,它不需要在编译时就确定大小,它的大小在程序运行过程中确定,所以可以根据程序需要而灵活的分配数组的大小,相比静态数组,它更“灵活”、“自由”。但是动态数组需要进行显式的内存释放。

2.动态数组内存分配

1一维数组

int size = 10;              //int size;//cin>>size;         int* Dynamic_Arr2 = new int[size];      //未初始化

我们分配了一个动态数组,其实返回的是一个T类型的指针,指针指向的是数组的第一个元素,从这个角度来说,动态数组更像是指针。也是由于这种性质,导致了动态数组中size可以取0,即返回一个空指针,即分配一个空动态数组是合法的

2多维数组(以2维为例)

int MAX_NUM = 10;int COL_NUM = 5, ROW_NUM = 3;double ***Arr3D = new double **[MAX_NUM];for (int i = 0; i < MAX_NUM; i++){Arr3D[i] = new double *[ROW_NUM];for (int j = 0; j < ROW_NUM; j++){Arr3D[i][j] = new double[COL_NUM];}}

3.动态数组初始化

1默认初始化

int* Dynamic_Arr3 = new int[size]();     //默认的初始化;

只在分配内存后加一对括号。

2.自定义初始化

string* Dynamic_Arr4 = new string[size]{"aa", "bb","cc", "dd", string(2, 'e') };      

4.动态数组释放

delete [ ] Dynamic_Arr4;

delete释放数组是逆序进行的,最后一个元素被最先释放,第一个元素最后一个被释放。

使用动态数组时,一定要记得显式的释放内存,否则很容易出错,比如在一个大的工程中,某一个for循环中或者某个函数中申请了内存却没释放,当函数不断地被调用,这些申请过的内存会一直堆积,直到最后退出程序。这很可能造成非常大的麻烦。

5.例子 Gradebook类的实现

实现了一个分数册,记录了(默认10个)学生的成绩和科目名称,实现了求均分,求分布等功能,这个类也是大学教程里比较重要的一个类,务必掌握。

#include<iostream>
#include<iomanip>
using namespace std;class Gradebook {
public:const static int students = 10;Gradebook(string ,const int[]);void setCourseName(string);void processGrade();int getMax() const;int getMin()const;double getAverage();void outputChartBar();void outputGrades();
private:string courseName;int grades[students];
};Gradebook::Gradebook(string s, const int a[]) {setCourseName(s);for (int i = 0; i < students; i++)grades[i] = a[i];
}void Gradebook::setCourseName(string s) {courseName = s;
}void Gradebook::processGrade() {outputGrades();cout << "Average of grades is : " << setprecision(2) << fixed << getAverage() << endl;cout << "The lowest is : " << getMin() << " The highest is : " << getMax() << endl;outputChartBar();
}int Gradebook::getMax()const {int max = 0;for (int i = 0; i < students; i++)max = max > grades[i] ? max : grades[i];return max;
}int Gradebook::getMin()const {int min = 101;for (int i = 0; i < students; i++)min = min < grades[i] ? min : grades[i];return min;
}double Gradebook::getAverage() {int sum = 0;for (int i = 0 ; i < 10; i++)sum += grades[i];double average = (double)sum / students;return average;
}void Gradebook::outputChartBar() {int* gradeDistribution = new int[students + 1] {0};for (int i = 0; i < students; i++) {gradeDistribution[grades[i] / 10]++;}cout << "The chartbar is showed below :" << endl;for (int count = 0; count < students + 1; count++) {if (count == 0)cout <<setw(6)<<right<< "0-9:";else if (count == 10)cout << setw(6) << right << "100:";elsecout << count << "0-" << count << "9:";for (int stars = 0; stars < gradeDistribution[count]; stars++)cout << "*";cout << endl;}
}void Gradebook::outputGrades() {for (int i = 0; i < students; i++)cout << "Students" << setw(2) << i + 1 << ":" << setw(3) << grades[i] << endl;
}

测试代码:

int main() {int grades[Gradebook::students] = { 99,100,60,88,76,87,67,59,69,93 };Gradebook mathsbook("maths", grades);mathsbook.processGrade();
}

6.参考文章

(4条消息) 【C++】细说C++中的数组之动态数组_c++动态数组_不用先生的博客-CSDN博客https://blog.csdn.net/u013921430/article/details/79601429

C++数组之动态数组相关推荐

  1. vector,数组,动态数组效率测试

    对vector.数组.new创建的动态数组.预先reverse的vector测试代码如下: #include <iostream> #include <vector> #inc ...

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

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

  3. java封装数组_Java封装数组之动态数组实现方法详解

    本文实例讲述了Java封装数组之动态数组实现方法.分享给大家供大家参考,具体如下: 前言:在此之前,我们封装的数组属于静态数组,也即数组空间固定长度,对于固定长度的数组当元素超过容量时会报数组空间不足 ...

  4. 数据结构之数组及动态数组剖析

    数据结构之数组及动态数组剖析 文章目录 数据结构之数组及动态数组剖析 概述 动态数组实现的原理 实践编写动态数组类 时间复杂度分析 数组对数器 参考代码 相关链接 公众号 参考 概述 数组是在程序设计 ...

  5. java二维数组添加元素_Java二维数组与动态数组ArrayList类详解

    java二维数组 java 语言中提供的数组是用来存储固定大小的同类型元素. 1.二维数组初始化和声明 数组变量的声明,和创建数组可以用一条语句完成,如下所示: int a[][] = new int ...

  6. arraylist 初始化_Java二维数组和动态数组ArrayList 类

    Java二维数组 Java 语言中提供的数组是用来存储固定大小的同类型元素. 1.二维数组初始化和声明 数组变量的声明,和创建数组可以用一条语句完成,如下所示: int a[][] = new int ...

  7. c++ 构造函数数组_“动态数组”的设计与实现

    引言 数据结构是计算机存储.组织数据的方式.常见的数据结构有: (1)线性结构 如:线性表(包括:数组.链表.栈.队列.哈希表). (2)树形结构 如:二叉树.AVL树.红黑树.B树.堆.Trie.哈 ...

  8. 【15】Vue:02-Vue表单基本操作、表单修饰符、自定义指令、计算属性computed、侦听器watch、过滤器、生命周期、数组变异方法、替换数组、动态数组响应数据、图书列表案例、TODOS案例

    文章目录 day02 Vue常用特性 表单基本操作 表单修饰符 自定义指令 Vue.directive 注册全局指令 Vue.directive 注册全局指令 带参数 自定义指令局部指令 计算属性 c ...

  9. java 动态二维数组_Java数组、动态数组、二维数组的应用

    一.认识数组 1.容器的概念 ​用于存储数据的一块内存称为容器,生活中有很多容器,例如水杯,衣柜,以及存放"东西" ​存放在容器中的数据,称为"元素" 2.为什 ...

最新文章

  1. web前端细解cookie那些事
  2. python 三维散点图拟合曲面_python实现三维拟合的方法
  3. FineUIPro v5.1.0 发布了!
  4. 清明档总票房仅1.2亿元 全国影院营业比例不足50%
  5. RFID 芯片是什么
  6. Python——OpenCV形态学处理(膨胀与腐蚀)
  7. win10必须禁用的服务_关闭这几个系统服务,让你的电脑不再卡!
  8. 阶段3 3.SpringMVC·_07.SSM整合案例_09.ssm整合之Spring整合MyBatis框架配置事务
  9. Angular Compile Error NG6002
  10. selenium打开网址
  11. 自监督学习在计算机视觉中的应用
  12. OpenWrt操作系统移植SIM7600CE驱动及调试
  13. 主机与虚拟机之间无法粘贴复制
  14. 微阵列数据分析(Microarray data analysis)
  15. lc谐振计算机网络,LC谐振频率的测试方法和基本原理
  16. java excel 插件_轻量级的原生JavaScript的Excel插件——JExcel
  17. 如何排查网络丢包问题
  18. 利用Python对银行进行数据分析
  19. android nfc开发 简书,Android-NFC基础
  20. ubuntu 18.04 局域网无法访问内部DNS的解决办法

热门文章

  1. 黑色玫瑰为什么显示服务器奔溃,LOL:为什么玩家都说黑色玫瑰是一个神奇的大区,想进的要深思熟虑?这是啥原因?...
  2. 「从O2O到私域流量」2021长三角(南京)智慧零售大会报名通道开启!
  3. 【炉石传说】砰砰计划 斩杀 最后一关 通关攻略
  4. 用c++编写一个简单的员工管理系统
  5. [Canvas]越来越近的女孩
  6. 大腿拍断!足足闭关一个月肝完999页Java面试宝典,心灰意冷之际意外收到美团Offer!
  7. 斯德哥尔摩的照片六:旧城(中)
  8. 电力系统的额定电压及电压等级
  9. Flink reduce 作用 实例
  10. 向日葵远程连接会断开解决方法之一