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

news2024/10/5 14:16:44

迭代器是一个对象,可以循环访问 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.coloradmin.cn/o/1866830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全面芯片外贸指南解密IC电子元器件商城网站搭建/制作/开发策略

电子元器件行业在数字化转型的大潮下正经历着前所未有的变革。传统销售渠道的局限性日益凸显,越来越多的企业和商家开始寻求线上突破,搭建自己的IC电子元器件商城网站成为提升市场竞争力的关键一步。本篇文章道合顺芯站点将详细阐述搭建IC电子元器件商城…

声场合成新方法:基于声波传播的框架

声场合成是指在房间内的麦克风阵列上,根据来自房间内其他位置的声源信号,合成每个麦克风的音频信号。它是评估语音/音频通信设备性能指标的关键任务,因为它是一种成本效益高的方法,用于数据生成以替代真实的数据收集,后…

python 中面向对象编程:深入理解封装、继承和多态

在本章中,我们将深入探讨Python中的高级面向对象编程概念,包括封装、继承和多态。让我们开始吧! 目录 面向对象简介类和实例属性和方法继承和多态 高级面向对象概念私有变量使用 property使用 __slots__类的特殊成员__doc____call____str____…

如何用Vue3打造一个交互式待办事项列表和日历

本文由ScriptEcho平台提供技术支持 项目地址:传送门 构建交互式卡片组件:Vue.js 实战 应用场景介绍 在现代 Web 应用程序中,卡片组件无处不在,它们提供了一种灵活且可扩展的方式来展示信息和启用交互。本文将指导你使用 Vue.j…

Qt 学习(一) addressbook

Qt Demo: addressbook (1)创建项目:选择不创建界面,即UI,此时会自动生成的文件如图所示: QApplication: MainWindow 继承自 QMainWindow,根据需要设计的界面样式。 (2)确定MainWindow 的成员变量 首先&…

20240626(周三)AH股行情总结:沪指午后大反弹,港股震荡走高,AIGC、短剧概念走强,低价可转债触底反弹

内容提要 上证指数午后大反弹,创业板指涨近2%。港股震荡走高,恒生科技指数涨近1%。AIGC概念领涨,ST股、贵金属板块领跌。低价可转债集体大涨,广汇转债涨20%触发临停,广汇汽车今日上演地天板。 周三,A股午…

【BUG记录】条件查询没有查询结果 || MybatisPlus打印查询语句

结论 先说结论,查询没有结果,可能是数据库连接,数据问题之类,最有可能的根本原因是查询语句问题,需要想办法检查查询语句,使用mybatisPlus等自动生成查询语句的框架不能直接看语句,可以依靠日志…

Python期末模拟题库[python123题库]

期末模拟题库 一、单项选择题 1、下列关于Python语言的特点的说法中,错误的是()‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪…

高效运维:标准化与智能化的运维流程管理实践

高效运维:标准化与智能化的运维流程管理实践 在信息化建设日益深化的今天,运维流程管理已成为企业确保其信息系统稳定、高效运行的关键手段。通过系统化、标准化的运维流程管理,企业能够有效预防系统故障,提升服务质量&#xff0…

数据结构 —— 二叉树

1.树的概念及结构 1.1树的概念 树是一种非线性的数据结构,它有着多分支,层次性的特点。 由于其形态类似于自然界中倒过来的数,所以我们将这种数据结构称为“树形结构” 注意: 树形结构中,子树之间不能有交集&#x…

一加全机型TWRP合集/橙狐recovery下载-20240603更新-支持一加12/Ace3V手机

TWRP是目前安卓平台的刷机神器,可快速刷写第三方ROM或官方系统,刷入TWRP之前需要解锁BL,目前已适配一加多个机型。ROM乐园小编20240603整理,涵盖一加1到一加Ace3V多机型专用TWRP文件,个人机型橙狐recovery适配相对完整…

MySQL 8 命令安装卸载教程

一、下载MySQL8 下载连接 MySQL :: Download MySQL Community Server 我下载的是当前最新版8.4 二、安装 1.解压 解压到需要安装的位置,例如我的位置: 2.创建配置文件 新建文本文档,复制下面配置文件(注意修改路经)…

DPDK使用make编译并运行示例程序

环境: VMware Workstation 16 Pro 16.2.4 虚拟机系统:Centos 8 DPDK版本:stable-20.11.10 下载源码后,使用meson和ninja编译完成、配置并挂载大页、内核和VFIO设置完成,在dpdk源码目录下的build/…

小程序 UI 风格,引人入胜

小程序 UI 风格,引人入胜

OceanBase 4.X-2F1A 仲裁高可用方案初探

作者:郑增权,爱可生 DBA 团队成员,OceanBase 和 MySQL 数据库技术爱好者。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文约 1500 字,预计阅读需要 5 分钟。 背景 对…

10个国内免费AI绘画网站汇总【2024最新】

迎战MidJourney和Stable Diffusion:10款国产AI绘画神器,让你轻松创作出超凡艺术品!不论你是初学者还是资深艺术家,这些AI绘画平台都能帮你轻松入门。快来探索这些AI绘画网站,释放你的创意潜能! 1、AI绘画创…

Linux系统之nice命令的基本使用

Linux系统之nice命令的基本使用 一、nice命令介绍1.1 nice命令简介1.2 进程优先级介绍 二、nice命令基本语法2.1 nice命令的help帮助信息2.2 nice命令选项解释 三、nice命令的基本使用3.1 查看进程优先级3.2 使用nice启动进程3.3 提高优先级 四、注意事项 一、nice命令介绍 1.…

YCSB基准测试

1、Redis: 下载成功后,加载数据,运行 启动redis: /usr/local/redis/bin/redis-server ./bin/ycsb load redis -P workloads/workloade -p redis.hostlocalhost -p redis.port6379 -p recordcount10000 -p operationcount10000 -threads 32 ./bin/y…

Vue3-尚硅谷笔记

1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n 经历了:4800次提交、40个RFC、600次PR、300贡献者 官方发版地址:Release v3.0.0 One Piece vuejs/core 截止2023年10月,最…

简述RocketMQ从了解到使用

概念篇 背景: 随着队列和虚拟主题使用的增加,ActiveMQ IO模块达到了一个瓶颈。我们尽力通过节流、断路器或降级来解决这个问题,但效果并不理想。于是我们尝试了流行的消息传递解决方案Kafka。不幸的是,Kafka不能满足我们的要求,其尤其表现在低延迟和高可靠性方面,详见下…