C++学习/复习18----迭代器/反向迭代器及在list/vector中的应用、list与vector模拟实现复习

迭代器是一个对象,可以循环访问 C++ 标准库容器中的元素,并提供对各个元素的访问。 C++ 标准库容器全都提供迭代器,以便算法可以采用标准方式访问其元素,而不必考虑用于存储元素的容器类型。

一、反向迭代器类

基于普通迭代器构建反向迭代器

基本功能:*   ->  ++  --   !=  构造函数

注意事项:迭代器返回值不同需要的模板参数不同

二、List中的应用

节点类

节点是组成链表的基本单位

基本参数:节点类型前后指针、存储的数据

基本功能:构造函数

注意事项1:指针类型为节点类型

注意事项2:数据类型为T,T可能为一个较大的自定义类型,传参时调用其构造函数构造一个匿名对象作为默认的缺省参数,此处认为内置类型也有构造/拷贝构函数,T为内置类型时也可以使用。

List迭代器类

基本功能:*  ->   前后置++   前后置--  !=  ==   构造函数

基本参数:节点类型指针(迭代器本质可看为一个指针)

注意事项1:成员函数基于链表中的节点指针实现

注意事项2:前置是加加/减减再返回改变的迭代器、后置是返回原来的迭代器再加加/减减,局部变量不可引用返回,函数参数不同才可引起重载

注意事项3:此处模板化可解决返回值类型不同(值返回/地址返回、const/非const的问题)

List类

基本参数:节点类对象

基本功能1:正反迭代器(begin,end,rbegin,rend)

注意事项:_head为头节点非第一个存储数据节点,作为带头双向链表的尾节点

基本功能2:构造函数与初始化函数与new

基本功能3:拷贝构造函数、赋值函数与swap函数 

注意事项:值传递是把对象的拷贝而不是本身传递给函数,函数中对参数对象的任何修改都不会影响调用该函数的对象本身;

注意事项:重载的赋值函数有引用类型返回值是为了=操作符可以连续使用

基本功能4:析构函数与clear函数、delete

基本功能5:链表头插尾插、头删尾删

基本功能6:insert与erase

注意事项:要返回新节点或删除节点后的迭代器防止迭代器失效,对于链表型数据结构,比如list,使用了不连续分配的内存,删除运算使指向删除位置的迭代器失效,但是不会失效其他迭代器

功能7:输出链表,依据迭代器实现

测试1:改变链表中的数据 

测试2:自定义类型链表

测试3:强化for()循环

测试4:insert

测试5:erase

测试6:拷贝构造与赋值

测试7:反向迭代器

三、vector中的应用

基本功能1:反向迭代器(rebegin=end,rend=begin)

基本功能2:构造函数

基本功能3:拷贝构造函数与swap与赋值函数

注意事项:T可能为自定义数据类型,缺省函数传参时以T()形式调用构造函数创建匿名对象作为默认参数

注意事项:对于vector容器要考虑reserve扩容

注意事项:重载的赋值函数有引用类型返回值是为了=操作符可以连续使用

基本功能4:析构函数与delete

基本功能5:size与capacity

注意事项:指针相减得到的是两个指针之间相隔的元素个数

注意事项:size是有效数据个数,capacity是vector当前可用的总容积

注意事项:扩容时用for循环的方式将原区域的数据复制到新空间

注意事项:resize在扩容基础上还会在空白区域初始化填上默认数据

基本功能6:尾插尾删

基本功能7:随机存取

注意事项:vector支持随机存取,此处const修饰this指针实现只读与读写模式

基本功能8:insert与erase

注意事项:vector的insert考虑位置是否合理,考虑是否需要扩容

注意事项:erase要考虑位置是否合理

注意事项:要返回迭代器防止迭代器失效

基本参数:三个iterator对象维护数组的数据开头数据结尾以及空间结尾

测试1:数组数据读取

测试2:insert

测试3:insert

测试4:erase

测试5:vector与string与拷贝构造

测试6:vector与char

测试7:vector实现杨辉三角

测试8:反向迭代器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Chapter8】文件系统,计算机操作系统教程,第四版,左万利,王英

文章目录 [toc]一、文件与文件系统1.1 文件1.2 文件系统 二、文件的访问方式2.1 顺序访问2.2 随机访问 三、文件的组织3.1 文件的逻辑组织3.2 文件的物理组织3.2.1 顺序结构3.2.2 链接结构3.2.3 索引结构3.2.4 Hash 结构3.2.5 倒排结构 3.3 UNIX文件物理结构(索引链…

HarmonyOS Next开发学习手册——进程模型线程模型

进程模型 系统的进程模型如下图所示: 应用中(同一包名)的所有PageAbility、ServiceAbility、DataAbility、FormAbility运行在同一个独立进程中,即图中绿色部分的“Main Process”。 WebView拥有独立的渲染进程,即图中…

智能工厂中滑环应用的集成式和分立式数据接口解决方案

第四次工业革命通过在生产过程中实现新场景来推动数字化制造向前发展。这些场景依赖于基本的设计原则,包括器件互联、信息透明、技术协助,以及分散决策。没有先进的无线通信技术,就无法在现代智能工厂中实现所有这些原则。它们支持在广泛的领…

JM日志文件解析

研究意义 JM代码是对H264协议支持最全面的,不但还有编码还包括解码,通过它生成的trace文件可以对码流做一个很好的解读,目前很多码流分析工具也是基于JM的trace文件进行分析,研究它可以更深刻的理解H264协议。 环境搭建 先用cmake.exe 生成VS的工程文件 ●用VS 2019编译…

Modbus TCP什么场景用?

什么是Modbus TCP Modbus TCP是一种基于TCP/IP网络的通信协议,它允许不同的设备通过以太网进行数据交换。Modbus协议最初是为串行通信设计的,但随着网络技术的发展,Modbus TCP应运而生,它继承了Modbus RTU和Modbus ASCII的许多优点…

【分布式文件系统HDFS】文件操作基本命令的使用

目录 一、按照下述要求写出相应的文件操作命令,执行并观察结果 1. 新建目录 1.1 在本地文件系统按要求创建如下的文件夹 1.2 在HDFS文件系统按要求创建如下的文件夹 2. 编辑文件test1.txt,放入本地文件夹 /opt/user/myfile 3. 使用moveFromLocal命令…

沙盒在数据防泄密领域意义

在信息化快速发展的今天,数据已成为企业最宝贵的资产之一。然而,数据泄密事件频发,给企业的安全和发展带来了巨大威胁。SDC沙盒防泄密系统,作为一种创新的数据防泄密解决方案,正逐渐在数据防泄密领域发挥着越来越重要的…

客户端输入网址后发生的全过程解析(协议交互、缓存、渲染)

目录 1. 输入 URL 并按下回车键2. DNS 解析3. TCP 连接4. 发送 HTTP 请求5. 服务器处理请求6. 发送 HTTP 响应7. 浏览器接收响应8. 渲染网页9. 执行脚本10. 处理其他资源11. TLS/SSL 加密(如果使用 HTTPS)握手过程 12. 协议协商和优化 总结 1. 输入 URL …

低碳短视频:成都柏煜文化传媒有限公司

低碳短视频:绿色传播的新风尚 随着全球气候变化和环境问题日益严峻,低碳生活已经成为人们追求的新风尚。在这个背景下,低碳短视频应运而生,以其独特的方式传播绿色理念,推动低碳生活方式的普及。成都柏煜文化传媒有限…

如何使用sr2t将你的安全扫描报告转换为表格格式

关于sr2t sr2t是一款针对安全扫描报告的格式转换工具,全称为“Scanning reports to tabular”,该工具可以获取扫描工具的输出文件,并将文件数据转换为表格格式,例如CSV、XLSX或文本表格等,能够为广大研究人员提供一个…

boss直聘招聘数据可视化分析

boss直聘招聘数据可视化分析 一、数据预处理二、数据可视化三、完整代码一、数据预处理 在 上一篇博客中,笔者已经详细介绍了使用selenium爬取南昌市web前端工程师的招聘岗位数据,数据格式如下: 这里主要对薪水列进行处理,为方便处理,将日薪和周薪的数据删除,将带有13薪…

Excel 将某个序列随机重排 N 次

A 列是个随机序列,B2 格是参数,表示重排的次数。 AB1ItemsReplicates2A23B4C5D 要求将 A 列重拍 N 次 D1Result2C3D4B5A6D7A8B9C 使用 SPL XLL,输入公式: spl("?2.conj(?1.sort(rand()))",A2:A5,B2)"整数.()…

RK3568平台开发系列讲解(调试篇)分析内核调用的利器 ftrace

🚀返回专栏总目录 文章目录 一. 指定 ftrace 跟踪器二、设置要 trace 的函数三、ftrace 的开关四、查看 trace五、trace-cmd 的使用六、trace-cmd 的常用选项6.1、查看可以跟踪的事件6.2、跟踪特定进程的函数调用6.3、函数过滤6.4、限制跟踪深度6.5、追踪特定事件沉淀、分享、…

数字化采购管理革新:全过程数字化采购管理平台的架构与实施

摘要:在数字化转型的浪潮中,采购管理正逐步迈向全流程的数字化。本文将详细解析全过程数字化采购管理平台的技术架构和实施策略,探讨如何通过Spring Cloud、Spring Boot2、Mybatis等先进技术和服务框架,实现从供应商管理到采购招投…

关于linux的图形界面

关于linux的图形界面 1. 概述1.1 X1.2 DM(显示管理器/登录管理器)1.3 WM(窗口管理器)1.4 GUI Toolkits1.5 Desktop Environment1.6 基本架构 2. 安装桌面2.1 Centos安装桌面2.2 Ubuntu安装桌面(未实践) 3. …

OpenGL-ES 学习(6)---- 立方体绘制

目录 立方体绘制基本原理立方体的顶点坐标和绘制顺序立方体颜色和着色器实现效果和参考代码 立方体绘制基本原理 一个立方体是由8个顶点组成,共6个面,所以绘制立方体本质上就是绘制这6个面共12个三角形 顶点的坐标体系如下图所示,三维坐标…

调试代码Pair-wise-Similarity-module-master

第一步:运行.py文件生成json文件 问题一:json.decoder.JSONDecodeError: Invalid \escape: line 1 column 31616 (char 31615) 解决: for dataset in dataset_list:with open(datasetmap[dataset] ".csv", "r") as li…

ETO外汇:日元技术分析,美元/日元、欧元/日元、英镑/日元未来走势如何?

摘要: 根据近期的市场分析,美元/日元、欧元/日元和英镑/日元这三组货币对在未来的走势将受到多方面因素的影响。本文将从技术角度对每一组货币对进行详细分析,帮助投资者了解可能的支撑和阻力位,以及未来的走势预期。通过对关键技…

基于Transformer的自监督学习在NLP中的前沿应用

1. 引言 自然语言处理(NLP)领域正经历一场由自监督学习(Self-Supervised Learning, SSL)和Transformer架构共同驱动的革命。自监督学习通过巧妙地利用未标注数据,大大减少了对人工标注的依赖,而Transforme…

第二节课 6月13日 ssh密钥登陆方式

centos和ubuntu openssh服务的初始安装 一、实验:ubuntu系统激活root用户 ubuntu系统如何激活root用户,允许root用户ssh登陆? 1、ubuntu默认root用户未设置密码,未激活 激活root用户,设置root密码 sudo passwd roo…