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.mzph.cn/bicheng/38863.shtml

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

相关文章

使用gitlab的CI/CD实现logseq笔记自动发布为单页应用

使用gitlab的CI/CD实现logseq笔记自动发布为单页应用 使用gitlab的CI/CD实现logseq笔记自动发布为单页应用如何实现将logseq的笔记发布成网站使用 logseq-publish-docker 实现手动发布使用gitlab的CI/CD实现自动发布过程中的问题及解决参考资料 使用gitlab的CI/CD实现logseq笔记…

第二届重庆国际渔业博览会

The 2th Chongqing International Fisheries & Seafood Expo 时间:2024年10月25-27日 地点:重庆国际博览中心 同期举办:第十六届中国(重庆)火锅美食文化节暨第九届中国(重庆)国际火锅产业博览会 展会规模: 展出…

(论文版)深度学习 | 基于 VGG16-UNet 语义分割模型的猫狗图像提取研究

Hi,大家好,我是半亩花海。本实验本项目基于 VGG16-UNet 架构,利用 Labelme 标注数据和迁移学习,构建高效准确的猫狗图像分割模型。通过编码器-解码器结构(特征提取-上采样)提升分割精度,适应不同…

VBA数据库解决方案第十二讲:如何判断数据库中数据表是否存在

《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…

第11章 规划过程组(11.6规划进度管理)

第11章 规划过程组(二)11.6规划进度管理,在第三版教材第385页;#软考中级##中级系统集成项目管理师# 文字图片音频方式 第一个知识点:主要输出 1、进度管理计划 准确度 定义活动持续时间估算的可接受区间&#xff0…

第二周:计算机网络概述(下)

一、计算机网络性能指标(速率、带宽、延迟) 1、速率 2、带宽 3、延迟/时延 前面讲分组交换的时候介绍了,有一种延迟叫“传输延迟”,即发送一个报文,从第一个分组的发送,到最后一个分组的发送完成的这段时…

医疗AI革命,为何多模态大模型难以突破?

在人工智能的浪潮中,多模态大模型以其强大的数据处理能力和深度学习算法,被寄予厚望于医疗影像分析、辅助诊断等领域。然而,现实情况却远非如此乐观。本文将带您深入了解多模态大模型在医疗辅助诊断领域的潜力与局限,揭示其面临的…

ue5导航网格设置

AI使用导航网格进行移动,所以,先设置导航网格边界体积 2,使导航网格边界体积覆盖AI所需要的场景(绿色区域),x,y,z在这里都扩大到原来的10倍 3,打开actor的“启用tick并开始” 4&…

MathType8.0最新官方免费版 功能强大的数学公式编辑器

MathType 是款功能强大的数学公式编辑器,可以让用户轻松地在各种文档中插入复杂的数学公式和符号。它支持手写输入公式,方便用户直接通过鼠标或触摸屏操作来创建公式。MathType 的符号丰富,几乎涵盖了所有数学、物理和化学等领域所需的符号。…

128陷阱详解

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

windows下启动redisSentinel

如果已经安装redis的就继续往下看&#xff0c;还没安装redis&#xff0c;先安装一下redis 安装完redis之后&#xff0c;打开redis的目录。 新建一个sentinel.conf文件 # 端口号 port 26379# Sentinel 监控的主节点信息&#xff0c;格式为 <master-name> <ip> &l…

球形气膜:现代娱乐场馆的最佳选择—轻空间

随着科技的发展和人们对高品质生活的追求&#xff0c;娱乐场馆的建设迎来了新的变革。球形气膜结构凭借其独特的优势&#xff0c;逐渐成为现代娱乐场馆建设的最佳选择。轻空间将介绍球形气膜的优势&#xff0c;并探讨其在不同应用场景中的广泛应用。 球形气膜的优势 1. 独特的建…

【Python实战因果推断】13_线性回归的不合理效果3

目录 Regression Theory Single Variable Linear Regression Multivariate Linear Regression Frisch-Waugh-Lovell Theorem and Orthogonalization Regression Theory 我不打算太深入地探讨线性回归是如何构建和估计的。不过&#xff0c;一点点理论知识将有助于解释线性回归…

【HarmonyOS NEXT】鸿蒙如何动态添加组件(NodeController)

NodeController用于实现自定义节点的创建、显示、更新等操作的管理&#xff0c;并负责将自定义节点挂载到NodeContainer上。 说明 本模块首批接口从API version 11开始支持 当前不支持在预览器中使用NodeController。 导入模块 import { NodeController } from "ohos…

尚硅谷k8s 2

p54-56 k8s核心实战 service服务发现 Service:将一组 Pods 公开为网络服务的抽象方法。 #暴露Deploy,暴露deploy会出现在svc kubectl expose deployment my-dep --port8000 --target-port80#使用标签检索Pod kubectl get pod -l appmy-depapiVersion: v1 kind: Service metad…

无锁编程——从CPU缓存一致性讲到内存模型(1)

一.前言 1.什么是有锁编程&#xff0c;什么是无锁编程&#xff1f; 在编程中&#xff0c;特别是在并发编程的上下文中&#xff0c;“无锁”和“有锁”是描述线程同步和资源访问控制的两种不同策略。有锁&#xff08;Locked&#xff09;: 有锁编程是指使用锁&#xff08;例如互…

Python系统教程01

Python 是一门解释性语言&#xff0c;相对更简单、易学&#xff0c;它可以用于解决数学问题、获取与分 析数据、爬虫爬取网络数据、实现复制数学算法等等。 1、print()函数&#xff1a; print()书写时注意所有的符号都是英文符号。print()输出内容时&#xff0c;若要输出字符…

大力出奇迹:大语言模型的崛起与挑战

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;大语言模型&#xff08;LLM&#xff09;的出现与应用&#xff0c;彻底改变了我们与机器互动的方式。本文将探讨ChatGPT等大语言模型的定义、…

回溯 | Java | LeetCode 39, 40, 131 做题总结(未完)

Java Arrays.sort(数组) //排序 不讲究顺序的解答&#xff0c;都可以考虑一下排序是否可行。 39. 组合总和 错误解答 在写的时候需要注意&#xff0c;sum - candidates[i];很重要&#xff0c;也是回溯的一部分。 解答重复了。是因为回溯的for循环理解错了。 class Solutio…

力扣热100 哈希

哈希 1. 两数之和49.字母异位词分组128.最长连续序列 1. 两数之和 题目&#xff1a;给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案。…