C/C++编程知识分享:C++ 手把手教你实现可变长的数组
01 实现自定义的可变长数组类型
假设我们要实现一个会自动扩展的数组,要实现什么函数呢?先从下面的main函数给出的实现,看看有什么函数是需要我们实现的。
输出结果:
要实现的方式,要做哪些事情呢?我先列一下:
(1)要用动态分配的内存来存放数组元素,需要一个指针成员变量
(2)重载赋值=运算符
(3)重载[]运算符
(4)重载复制构造函数
(5)实现push_back和length()函数
02 MyArray类的实现步骤
要实现一个可变长数组类的,基本需要实现下面的7个函数:
1. 构造函数
构造函数的目的就是初始化一个数组,代码如下:
2. 复制构造函数
复制构造函数目的就是产生一个与入参对象一样的对象,但是由于MyArray类是有指针成员变量的,所以我们必须才用深拷贝的方式来实现复制构造函数,如果使用默认的复制构造函数,则会导致两个对象的指针成员变量指向的地址是同一个,这是非常危险的。
3. 析构函数
析构函数的目的就是释放数组的资源。
4. 重载赋值=运算符函数
重载赋值=运算符函数目的就使=号左边对象里存放的数组,大小和内容都和右边的对象一样。
5. 重载[]运算符函数
重载[]运算符函数目的就是能通过[]运算符来获取对应下标的数组值。
.6. 加入元素到数组末尾的函数
push_back函数的目的就是把一个新的元素,加入到数组的末尾。
7. 获取数组长度的函数
length()函数就比较简单了,直接返回成员变量m_size,就是数组的长度了。
03 小结
可变长数组类型实现的整体代码,如下:
实际上本次的可变长的数组类还缺少一下函数,比如:删除某个元素的函数、清空数组的函数等等,这些可以留给大家思考。
还有就是 push_back 函数还有优化的空间,当前的 push_back 函数每加入一个元素都会重新分配新的内存,这是会增大开销的,那么优化的思路:
提前分配好一个 n 大小的空间,当数组大小不够的时候,则才继续重新分配 2n 大小的空间,以此类推。
博客园:小林coding
学习C/C++编程,提升C++编程能力,欢迎关注博主的微信公众号:C语言编程学习基地,一起来学习进步吧!
C/C++编程知识分享:C++ 手把手教你实现可变长的数组相关推荐
- C++ 手把手教你实现可变长的数组
01 实现自定义的可变长数组类型 假设我们要实现一个会自动扩展的数组,要实现什么函数呢?先从下面的main函数给出的实现,看看有什么函数是需要我们实现的. int main() {MyArray a; ...
- 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)
原标题:少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二) 检测和判断 无论我们制作的简单或者复杂的游戏 这都是最关键的两个部分 事件处理循环 61. while True: # 游戏主循环 62 ...
- python 儿童 游戏_少儿编程分享:手把手教你用Python编写战斗机游戏(完)
原标题:少儿编程分享:手把手教你用Python编写战斗机游戏(完) 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑 .接下来,我们要把单调的白色矩形换成好看的图片. 在前面的代码中,我们用 ...
- 用python画小兔子_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)
原标题:少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一) 游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫 ...
- python图形设计编程_少儿编程分享:手把手教你用Python制作艺术图片
原标题:少儿编程分享:手把手教你用Python制作艺术图片 在前面的几篇文章中,我们分享了一些用PyGame制作小游戏的教程.我们今天的分享使用的仍然是PyGame,只不过这次不是写游戏啦-我们要用P ...
- python俄罗斯方块编程思路_少儿编程分享:手把手教你用Python编写俄罗斯方块(十)...
www.codingmarch.com 游戏分享:手把手教你用 Python 编写 俄罗斯方块(十) 2017.12.28 这是俄罗斯方块的最后一章了 经历了这么多游戏 编写了这么多代码 你的心中是否 ...
- 怎么用python做战斗机_少儿编程分享:手把手教你用Python编写战斗机游戏(四)
游戏分享:手把手教你用Python编写 战斗机游戏(四) 2018.1.25 飞机大战就到这里啦 你的飞机大战做出来了吗 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑.接下来,我们要把单 ...
- 计算机专业的大学生vlog日常,【干货分享】手把手教你拍好在校大学生的VLOG
原标题:[干货分享]手把手教你拍好在校大学生的VLOG 前几天小塔收到了一份特殊的礼物--来自塔粉投稿的[民大一日VLOG].小塔惊喜地发现:原来民大校园里发生的一切都这么有趣可爱!将日常用视频的方式 ...
- socket 长链接linux,手把手教你写 Socket 长连接
原标题:手把手教你写 Socket 长连接 8点43分打卡 就是真爱 本文转载自公众号 玉刚说,由玉刚说写作平台[1]提供写作赞助 原作者:水晶虾饺[2] 版权声明:本文版权归微信公众号玉刚说所有,未 ...
最新文章
- 1074 Reversing Linked List (25 分)【难度: 一般 / 知识点: 链表】
- 58 Openstack基础、openstack之glance、openstack之keystone
- CPU-内存-IO-网络调优
- python从小到大的顺序输出_「小白专栏」Python中使用for循环,为什么输出结果不是按顺序?...
- 程序包清单签名验证失败_数字世界的手写签名
- 前端周刊第58期:送你 3 道面试题
- 深入探究Java中hashCode()和equals()的关系
- Android studio : 模拟器 真机 运行失败(mac电脑)
- SQL Server 创建数据库关系图时 索引超过数组界限。(已解决)
- 黑白群晖 进阶篇 不得不注意的情况
- 阻滞增长模型求解_马尔萨斯与阻滞增长模型对于人口预测的分析
- 用html任选一首诗自动排版,利用 html2canvas 做个简单的诗词卡片生成器
- 2018年度亚太区最佳机场贵宾室公布
- python clicknium 库自动化千牛桌面端
- 特殊矩阵——n阶对称矩阵
- linux卸载netcdf,科学网-Ubuntu中安装netcdf4以上方法-伍志元的博文
- nz-select选项无法默认显示
- Navicat SQL server 数据备份,数据还原
- 3G时代的十大移动互联网应用
- 2021美亚杯个人赛记录
热门文章
- mysql sys exec_python - 使用MySQL UDF执行命令-sys_exec不起作用 - 堆栈内存溢出
- 分拣外观残缺的机器人_复合机器人AGV+协作机器人的应用领域
- php mysql-proxy报错_MySQL-proxy代理导致PHP PDO::ATTR_EMULATE_PREPARES的预处理出错,MySQL报General error: 1243错误...
- 基本数据类型的成员变量放在jvm的哪块内存区域里?
- MyBatis的resultType和resultMap的区别
- 2021年B站创作者生态报告
- 互联网晚报 | 12月14日 星期二 | “植发第一股”雍禾医疗登陆港交所;商汤科技将延迟上市;“拍照搜题”等作业APP暂时下线...
- 2021年中国高精地图产业研究分析
- 拼多多数据全面解析报告
- 电商节直播研究报告—以618为例