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

server/2024/10/22 8:32:38/

那么本篇文章是带大家一起实现一下数据结构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.ppmy.cn/server/110309.html

相关文章

【JVM】垃圾收集器与GC日志(二)

垃圾收集器与GC日志 ZGC收集器(Z Garbage Collector,全并发、超低延迟 10ms) ZGC是一款JDK11中新加入的具有实验性质的低延迟垃圾收集器,ZGC可以说源自于Azul System公司开发的C4(Concurrent Continuously Compacting Collector)收集器 参考文章:http…

计算机毕设推荐-基于python的超市数据处理可视化分析

💖🔥作者主页:毕设木哥 精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 实战项目 文章目录 实战项目 一、基于python的超市数据处理可…

学习大数据DAY43 Sqoop 安装,配置环境和使用

目录 sqoop 安装 配置 mysql sqoop 安装 sqoop 指令集 sqoop 使用 sqoop 创建 hive 表 sqoop 全量导入表 sqoop 增量导入表 sqoop 全量导出表 sqoop 分区表导入表 sqoop 分区表导出表 上机练习 sqoop 安装 配置 mysql create database test DEFAULT CHARACTER S…

Kafka【三】Windows下安装Kafka集群

前文:Kafka【一】Windows下安装单节点Kafka ① 安装ZooKeeper 在D:\创建文件夹kafkacluster,将kafka安装包kafka_2.12-3.6.1解压缩到kafka文件夹。 修改文件夹名为kafkazk 因为kafka内置了ZooKeeper软件,所以此处将解压缩的文件作为ZooKeep…

Training language models to follow instructionswith human feedback

Abstract 将语言模型做得更大并不会自动提高它们遵循用户意图的能力。例如,大型语言模型可能会生成不真实、有毒或对用户不有帮助的输出。换句话说,这些模型并未与用户对齐(aligned)。本文展示了一种通过人类反馈来对齐语言模型与…

SQL的化身术:使用AS为列或表指定别名

标题:SQL的化身术:使用AS为列或表指定别名 在SQL查询的世界里,别名是一个强大的工具,它允许我们为列或表提供一个临时的名字,以使查询结果更加清晰或简化复杂的查询。AS关键字是指定别名时最常用的方法。本文将深入探…

【Python机器学习】NLP分词——词的“情感”

目录 VADER:一个基于规则的情感分析器 朴素贝叶斯 无论NLP流水线中使用的是单个词、n-gram、词干还是词元作为词条,每个词条都包含了一些信息,这些信息中一个重要部分是词的情感,即一个词所唤起的总体感觉或感情。这种度量短语或…

【逐行注释】容积卡尔曼滤波的MATLAB例程(三维CKF),无需下载,可直接复制代码到MATLAB上运行

文章目录 CKF完整源代码与注释程序运行结果绘图部分误差的统计特性计算与输出部分CKF CKF全称为容积卡尔曼滤波,相比于UKF(无迹卡尔曼滤波),拥有更合理的理论推导和鲁棒性,且在理论上比UKF的精度更高。 另有: 与EKF的对比程序:https://blog.csdn.net/callmeup/article/…