C++数组之动态数组

这篇具有很好参考价值的文章主要介绍了C++数组之动态数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 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:";
		else
			cout << 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();
}

 C++数组之动态数组

6.参考文章

(4条消息) 【C++】细说C++中的数组之动态数组_c++动态数组_不用先生的博客-CSDN博客https://blog.csdn.net/u013921430/article/details/79601429文章来源地址https://www.toymoban.com/news/detail-436949.html

到了这里,关于C++数组之动态数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C/C++】静态内存分配与动态内存分配

    1.1 - 定义概述 内存分配 (Memory Allocation) 是指为计算机程序或服务分配物理内存空间或虚拟内存空间的一个过程。通常在程序执行前或执行时完成内存分配。 1.2 - 分类概述 存在两种类型的内存分配: 编译时内存分配或静态内存分配 (Compile-time or Static Memory Allocation) 运行时内存

    2024年02月11日
    浏览(41)
  • 动态分配内存与释放

    1.malloc malloc()可以找到一个大小合适的块。 内存是匿名的,也就是说,malloc()分配了内存,但没有为它指定名字。 格式如下: double*ptd; ptd=(double*)malloc(30*sizeof(double)); ps:ptd可以看成是一个数组。 malloc()可能分配不到所需的内存。在这种情况下,该函数返回空指针。

    2024年01月17日
    浏览(63)
  • 用指针实现内存动态分配

    导引 :已知:变量在使用前必须被定义且安排好存储空间。且变量有这么一些分类:全局变量、静态局部变量【它们的储存一般是在编译时确定,在程序开始执行前完成。】自动变量【在执行进入变量定义所在的复合语句时为它们分配存储,变量的大小也是静态确定的。临时

    2023年04月09日
    浏览(80)
  • 内存动态分区分配算法

    所谓动态分区分配,就是指 内存在初始时不会划分区域,而是会在进程装入时,根据所要装入的进程大小动态地对内存空间进行划分,以提高内存空间利用率,降低碎片的大小 动态分区分配算法有以下四种: 1. 首次适应算法(First Fit) 空闲分区以 地址递增的次序链接 。分

    2024年02月11日
    浏览(50)
  • Java 基础入门篇(三)—— 数组的定义与内存分配

    数组就是一个容器,用于在程序中存储一批同种类型的数据。 使用场景:一旦确定了数据的具体值,我们就用这种方式存储批量数据。 使用场景:适合做一开始不能确定具体数据的情况。先定义数组,后赋值数据进去。 动态初始化数组的元素存在默认值: 注: 数据类型[

    2024年02月02日
    浏览(46)
  • [正式学习java②]——数组的基本使用,java内存图与内存分配

     🌈键盘敲烂,年薪30万🌈 目录 一、数组的两种初始化方式 1.完整格式(静态初始化) 2.动态初始化 二、数组的遍历方式 三、数组的开辟与访问 四、数组的注意事项 1.数组直接打印打印的是地址值 2.数组在内存图中的位置 3.数组一旦开辟了空间长度是不可变的 4.区分数组长度

    2024年02月08日
    浏览(42)
  • 【进阶C语言】动态内存分配

    本章大致内容介绍: 1.malloc函数和free函数 2.calloc函数 3.realloc函数 4.常见错误案例 5.笔试题详解 6.柔性数组 1.malloc函数 (1)函数原型 函数参数: 根据用户的需求需要开辟多大的字节空间,为无符号的字节。 返回值: malloc函数成功开辟内存后,会返回该内存的起始地址,可

    2024年02月07日
    浏览(54)
  • 数据结构:动态内存分配+内存分区+宏+结构体

    1.定义一个学生结构体,包含结构体成员:身高,姓名,成绩;定义一个结构体数组有7个成员,要求终端输入结构体成员的值,根据学生成绩,进行冒泡排序。 1.申请一个10个int类型的堆区空间,并实现选择排序(需要导入头文件 #include stdlib.h) 2.用##拼接带参宏的参数 3.宏函

    2024年02月20日
    浏览(44)
  • 深入挖掘C语言 ----动态内存分配

    开篇备忘录: \\\"自给自足的光, 永远都不会暗\\\" 正文开始 C语言提供了一个动态开辟内存的函数; 这个函数向内存申请一块连续可用的空间, 并返回指向这块空间的指针. 如果内存开辟成功, 则返回一个指向开辟好空间的指针 如果开辟失败, 则返回一个NULL指针, 因此malloc的返回值一

    2024年04月28日
    浏览(46)
  • 详解C语言—动态内存分配(二)

    目录 前言: 几个经典的例题题 例一: 例二: 例三: 例四: 例五:   C/C++程序的内存开辟 柔性数组 柔性数组的特点: 柔性数组的使用:  柔性数组的代替: 柔性数组的优势: 小结: 希望在复习完详解C语言—动态内存分配(一)​​​​​​​,阅读此篇文章会进一步提升

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包