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++ 手把手教你实现可变长的数组相关推荐

  1. C++ 手把手教你实现可变长的数组

    01 实现自定义的可变长数组类型 假设我们要实现一个会自动扩展的数组,要实现什么函数呢?先从下面的main函数给出的实现,看看有什么函数是需要我们实现的. int main() {MyArray a; ...

  2. 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)

    原标题:少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二) 检测和判断 无论我们制作的简单或者复杂的游戏 这都是最关键的两个部分 事件处理循环 61. while True: # 游戏主循环 62 ...

  3. python 儿童 游戏_少儿编程分享:手把手教你用Python编写战斗机游戏(完)

    原标题:少儿编程分享:手把手教你用Python编写战斗机游戏(完) 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑 .接下来,我们要把单调的白色矩形换成好看的图片. 在前面的代码中,我们用 ...

  4. 用python画小兔子_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)

    原标题:少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一) 游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫 ...

  5. python图形设计编程_少儿编程分享:手把手教你用Python制作艺术图片

    原标题:少儿编程分享:手把手教你用Python制作艺术图片 在前面的几篇文章中,我们分享了一些用PyGame制作小游戏的教程.我们今天的分享使用的仍然是PyGame,只不过这次不是写游戏啦-我们要用P ...

  6. python俄罗斯方块编程思路_少儿编程分享:手把手教你用Python编写俄罗斯方块(十)...

    www.codingmarch.com 游戏分享:手把手教你用 Python 编写 俄罗斯方块(十) 2017.12.28 这是俄罗斯方块的最后一章了 经历了这么多游戏 编写了这么多代码 你的心中是否 ...

  7. 怎么用python做战斗机_少儿编程分享:手把手教你用Python编写战斗机游戏(四)

    游戏分享:手把手教你用Python编写 战斗机游戏(四) 2018.1.25 飞机大战就到这里啦 你的飞机大战做出来了吗 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑.接下来,我们要把单 ...

  8. 计算机专业的大学生vlog日常,【干货分享】手把手教你拍好在校大学生的VLOG

    原标题:[干货分享]手把手教你拍好在校大学生的VLOG 前几天小塔收到了一份特殊的礼物--来自塔粉投稿的[民大一日VLOG].小塔惊喜地发现:原来民大校园里发生的一切都这么有趣可爱!将日常用视频的方式 ...

  9. socket 长链接linux,手把手教你写 Socket 长连接

    原标题:手把手教你写 Socket 长连接 8点43分打卡 就是真爱 本文转载自公众号 玉刚说,由玉刚说写作平台[1]提供写作赞助 原作者:水晶虾饺[2] 版权声明:本文版权归微信公众号玉刚说所有,未 ...

最新文章

  1. 1074 Reversing Linked List (25 分)【难度: 一般 / 知识点: 链表】
  2. 58 Openstack基础、openstack之glance、openstack之keystone
  3. CPU-内存-IO-网络调优
  4. python从小到大的顺序输出_「小白专栏」Python中使用for循环,为什么输出结果不是按顺序?...
  5. 程序包清单签名验证失败_数字世界的手写签名
  6. 前端周刊第58期:送你 3 道面试题
  7. 深入探究Java中hashCode()和equals()的关系
  8. Android studio : 模拟器 真机 运行失败(mac电脑)
  9. SQL Server 创建数据库关系图时 索引超过数组界限。(已解决)
  10. 黑白群晖 进阶篇 不得不注意的情况
  11. 阻滞增长模型求解_马尔萨斯与阻滞增长模型对于人口预测的分析
  12. 用html任选一首诗自动排版,利用 html2canvas 做个简单的诗词卡片生成器
  13. 2018年度亚太区最佳机场贵宾室公布
  14. python clicknium 库自动化千牛桌面端
  15. 特殊矩阵——n阶对称矩阵
  16. linux卸载netcdf,科学网-Ubuntu中安装netcdf4以上方法-伍志元的博文
  17. nz-select选项无法默认显示
  18. Navicat SQL server 数据备份,数据还原
  19. 3G时代的十大移动互联网应用
  20. 2021美亚杯个人赛记录

热门文章

  1. mysql sys exec_python - 使用MySQL UDF执行命令-sys_exec不起作用 - 堆栈内存溢出
  2. 分拣外观残缺的机器人_复合机器人AGV+协作机器人的应用领域
  3. php mysql-proxy报错_MySQL-proxy代理导致PHP PDO::ATTR_EMULATE_PREPARES的预处理出错,MySQL报General error: 1243错误...
  4. 基本数据类型的成员变量放在jvm的哪块内存区域里?
  5. MyBatis的resultType和resultMap的区别
  6. 2021年B站创作者生态报告
  7. 互联网晚报 | 12月14日 星期二 | “植发第一股”雍禾医疗登陆港交所;商汤科技将延迟上市;“拍照搜题”等作业APP暂时下线...
  8. 2021年中国高精地图产业研究分析
  9. 拼多多数据全面解析报告
  10. 电商节直播研究报告—以618为例