c++模拟实现数据结构之vector篇

那么本篇文章是带大家一起实现一下数据结构vector,那么我们现在就进入正题。

e80e0730ba854a0d95157cd45e6aa3ca.gif

目录

接口介绍部分

增加

尾插

指定插入与头插

删除

尾删

指定位置删除

主要代码逻辑

增加

尾插

指定插入与头插

删除

尾删

指定位置删除

一些其他接口的代码逻辑

模拟实现过程中的经典bug

案例一

案例二

案例三


接口介绍部分

增加

尾插

d97045f798744323b2db7f29e1ac8ae2.png

尾插的参数列表只有一个,就是需要插入的值。

指定插入与头插

由于vector没有专用的头插接口,因此与指定插入的几口一致。

下图是比较常用的一种,也是我们今天要用的一种,那么它的参数列表是指定的位置和插入的值,而头插则是把指定位置设置为0即可

d32f1e2cc83742f6915c106bed6e9758.png

删除

尾删

从下图中,我们可以看到,它的参数列表中没有任何参数

8d2dfa50874e489380f60ab34f82f066.png

指定位置删除

468012947cad46588e10d11377455590.png

第一种是指定位置删除

第二种是区间删除,原则是左闭右开

主要代码逻辑

增加

尾插

ee2192f6d65845538b5b62f9fb3403ed.png

代码解释:判断空间是否有剩余,并且在空间充足的情况下插入x,并且++finish;

指定插入与头插

ced4746b321d4ffe95b32cf912dc8873.png

代码解释:在保证指定位置合法的情况下,除判断空间是否有剩余外,建议需要更新一下pos,因为有时候可能会导致迭代器失效等问题的出现,并且在空间充足的情况下从后往前依次后移,直到腾出pos,插入x,并且++finish;

删除

尾删

ed87d8ca67ff4dc8b6d02f0458eedb69.png

代码解释:声明不为空,在--finish

指定位置删除

c9680de0bd6541d6b3925fd49013147c.png

代码解释:还是一样的,我们先声明指定的位置必须合法,通过循环,从前往后,将后面的值挪动到前面一个位置,,最后--finish

一些其他接口的代码逻辑

迭代器的begin()和end()

d0aaa85df72349a0a52fdd06d00d24c1.png

代码疑惑点:首先这两个类型最后返回的是数组中的元素,因此类型要用自定义的iterator

拓展

77fc91981f434ef9bf5ea683982d8601.png

size和capacity的计算

fd957082798a4709b60442672063d871.png

判空函数

743960a778aa4d699a57ec2156037580.png

模拟实现过程中的经典bug

案例一

d98ffc9facb946fc841e41ff626b2841.png

代码状况:

f1f9751acc0b42728d882c669f078355.png

解决方案:

3fbaa112df4d405295fa2be24beca08b.png

案例二

118ce49a82194b4ebfd9bb8aff4dd313.png

解决方案:

f39805c23a6147b68dc093cfeecb7b3c.png

在命名空间内且在类外添加void test_vector();的函数声明

案例三

53fe8da5474e4648b42c17db9c80acf6.png

问题所在:

5051659856484297846d1ba6f6031cbc.png

finish空指针

解决方案:

66695e9957ac4034b1349140356eb9ed.png

使用旧的size

总结:

1. 纯属教学意义,有助于了解底层和前面知识学习后的实践,无实践意义

2. 在三个文件中都会出现的函数,需要在相同的命名空间内且位于类外位置进行声明

那么本期文章就先到这,我们下期见

53058962739d4c39a4b364a83ae6959f.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/413869.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django企业开发实战-学习小结

写在前面 初次阅读此书是三年前,当时没经历过完整的项目 觉得这书就是扯淡 后来经历过项目加班与毒打 今天再翻开此书 觉得实乃不可多得之物 花些时间啃下来吧 django版本 3.2 本博客开源项目地址 kimsmith/django企业实战 (gitee.com) 有的代码因为版本混乱报错…

Unity 3D学习资料集合

本文包含了unity3D 游戏开发相关的学习资料,包含了入门、进阶、性能优化、面试和书籍等学习资料,含金量非常高,在这里分享给大家,欢迎收藏。 学习社区 1.Unity3D开发者 Unity3D开发者论坛是一个专注于Unity引擎的开发者社区。在这…

VSCode设置复制 Ctrl+D想下复制

VSCode 默认向下复制当前行是 shift Alt ↓,但是我们习惯了IDE和webStrom的CtrlD的想下复制.下面是VSCode自定义快捷键. VSCode设置复制 CtrlD想下复制 1.文件->首选项->键盘快捷方式(ctrk 在案ctrs)2.输入 copy line down->右键->更改键绑定3.完成 1.文件->首…

探索《黑神话:悟空》背后的编程技术

《黑神话:悟空》作为一款备受期待的动作角色扮演游戏,以其卓越的视觉效果和流畅的游戏体验吸引了全球玩家的关注。这款游戏不仅在艺术设计和技术实现上展现了极高的水准,其背后的编程技术更是保证了游戏顺利运行和出色表现的关键因素。在这篇…

低代码技术新趋势——逆向工程

低代码的下一个趋势,应该是“逆向工程”,用户可以通过 可视化界面,逆向输出全栈工程代码。而标准的工程代码同样可以编译为支持可视化分析、编辑、调整的“无代码”程序。前一个是解释性语言向编译性语言的逆向工程。后者则是一个理论实践应用…

如何成为一个飞控算法工程师?

兄弟,这个问题问得好,但也别想着靠看几本书就能一步登天。飞控算法这玩意儿,真要干好了,不是简简单单几个公式几个库就能搞定的。你本科电子专业有点基础,玩过四轴飞行器也算是入门了,但要搞真算法&#xf…

ComfyUI:基于差分扩散的像素级图像修改

在几个月的沉寂之后,差分扩散(Differential Diffusion)被引入了。 玩了几天之后,我仍然对结果感到震惊。 这种新的先进方法允许以像素为基础进行更改,而不是以整个区域为基础进行更改。 另一种可能更通俗的说法&…

PCL-直通滤波

本篇内容: 讲解直通滤波的作用通过pcl实现直通滤波 效果: 1 主要原理 点云数据通常包含x、y、z三个维度的数据,用户指定维度、范围后,直通滤波过滤或保留该范围内的所有点云 假设我指定维度’y’,范围(…

【unity实战】使用新版输入系统Input System+Rigidbody实现第三人称人物控制器

最终效果 前言 使用CharacterController实现3d角色控制器,之前已经做过很多了: 【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用 【unity实战】C…

Ubuntu 24.04部署Wordpress

环境: Ubuntu 24.04 PHP 8.1.2-1ubuntu2.18 Nginx/1.18.0 (Ubuntu) WordPress 6.6.1 Mysql 8 文章目录 1. 安装php2. 配置nginx2.1. 安装nginx2.2. 配置 3. 下载wordpress3.1. 配置wordpress 4. mysql配置wordpress数据库和用户4.1. 安装和远程连接4.2. 创建wordpre…

【论文笔记】独属于CV的注意力机制CBAM-Convolutional Block Attention Module

目录 写在前面 一、基数和宽度 二、通道注意力模块(Channel Attention Module) 三、空间注意力模块(Spatial Attention Module) 四、CBAM(Convolutional Block Attention Module) 五、总结 写在前面 …

Photomator 3.3.22 (macOS Universal) - 照片编辑软件

Photomator 3.3.22 (macOS Universal) - 照片编辑软件 适用于 Mac、iPhone 和 iPad 的终极照片编辑器 请访问原文链接:https://sysin.org/blog/photomator/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Photoma…

LeetCode_sql_day20(1398.购买了产品A和产品B却没有购买产品C的顾客)

描述: Customers 表: ------------------------------ | Column Name | Type | ------------------------------ | customer_id | int | | customer_name | varchar | ------------------------------ customer_id 是这张表中具有唯一…

浏览器播放RTSP流,支持H264、H265等格式,支持IE、Chrome等浏览器

目录 背景 解决方案 效果 代码 前端代码 后端代码 下载 背景 项目中需要在浏览器中播放RTSP流,实在是不想折腾ActiveX控件 1、麻烦(开发麻烦、使用时设置也麻烦) 2、非IE浏览器不兼容 解决方案 使用OpenCvSharpNancy写一个解码服…

617. 合并二叉树

目录 一:题目: 二:代码: 三:结果: 一:题目: 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些…

捷达千里江山首发亮相,捷达品牌2024成都车展继续宠粉不停

2024年8月30日,捷达品牌携新车捷达千里江山惊艳亮相2024成都国际车展,并在五周年之际,发布幸福包油计划等宠粉福利,号召用户打卡千里江山,奔赴美好。与此同时,全新捷达VS5/VS7五周年纪念版车型进一步降低了…

H264码流结构讲解

所谓的码流结构就是指:视频经过编码之后所得到的数据是怎样排列的,换句话说,就是编码后的码流我们该如何将一帧一帧的数据分离开来,哪一块数据是一帧图像,哪一块是另外一帧图像,只要了解了这个,…

vue3是如何避免样式污染的?

众所周知,在vue中使用scoped可以避免父组件的样式渗透到子组件中。使用了scoped后会给html增加自定义属性data-v-x,同时会给组件内CSS选择器添加对应的属性选择器[data-v-x]。本文讲一下vue是如何给CSS选择器添加对应的属性选择器[data-v-x]。注&#xf…

JVM堆内存空间(heap)

在Java程序运行时,系统运行过程中产生的大部分实例对象以及数组对象都会被放到堆中存储。 默认情况下,如果不通过参数强制指定堆空间大小,那么JVM会根据当前所在的平台进行自适应调整,起始大小默认为当前物理机器内存的1/64&…

基于ssm+vue的汽车租赁管理系统

摘要 随着移动应用技术的发展,越来越多的用户借助于移动手机、电脑完成生活中的事务,许多的传统行业也更加重视与互联网的结合,以提高商家知名度和寻求更高的经济利益。针对传统汽车租赁系统,租赁信息、续租信息等问题&#xff0c…