C++:list篇

前言:

        观看C++的list前需要对链表有一些了解,如C语言的链表结构。本片仅介绍list容器中常用的接口函数概念以及使用。

list的概念:        

          简而言之,C++的list是一个双向带哨兵位的链表容器模板 

      

list的构造:

        1.list():默认构造

        2.list (const list& x) :拷贝构造函数

        3.list (InputIterator first, InputIterator last) 用[first, last)左闭右开的区间中的元素构造list.

        上图的输出打印是使用范围for进行打印,而范围for底层为list的迭代器。list的迭代器与vector、string的迭代器都不相同,这点小编会再下面进行大概讲解。

list迭代器(iterator)的使用:

        1.iterator begin();

        list的begin返回的是第一个有效节点的地址。

        2.iterator end();

                list的end返回的是哨兵为节点的地址。

     

        那么从上面的begin与end可以看出,使用迭代器遍历list,仅仅只需要解引用迭代器以及++迭代器就能取得我们想要的值与让迭代器走向下一个节点,那么有没有想过一个问题,list的迭代器与vector这种类似数组的迭代器底层是否是一样的呢?

        vector是一个天然的数组,而数组是一段连续的地址空间,vector的迭代器可以直接进行++就可以找到下一个数据的地址,解引用也可以直接访问数据

        而从上图的list是一个不连续的空间,单直接进行++的话会访问到当前节点+1的地址空间,那么此时就变成了野指针。并且对list迭代器进行*(解引用)操作如果单纯的来看,对it解引用会是一个节点,而并非节点内的数据。但根据输出可以看到list的迭代器与vector的迭代器使用起来并无差别

        但其实这是对list迭代器进行了封装操作,使得上层的使用看起来是一样的,但其实底层已经完全不一样了但为了方便理解list可暂时将迭代器理解成一个指针。

list capacity(容量)接口

        

        1.list.empty():判断当前链表是否为空

        

        empty函数是判断除哨兵位节点外是否还有其他节点,如果有则不为空,如果没有则为空.

        2.list.size():返回当前链表的节点个数

list的modifiers(修饰符)接口函数

        1.list.push_back

        2.list.insert:

    

        从上图可以看到,如果直接还是和之前vector一样向在第二个位置插入一个值,那么首先要让迭代器走到第二个位置,那么在list中是不能直接进行+2的操作,必须通过循环迭代到第二个位置。

        

       

        那么在insert里存不存在迭代器失效问题呢?

                答案是显而易见的,迭代器肯定是不会失效的,因为list不会涉及到扩容问题,同时此时pos也没有改变指向的位置,所以迭代器不会有失效的问题

        3.list.erase

                

        那么list的erase是否会有迭代器失效的问题?

        

        我们可以看到,当erase后如果在对it迭代器进行操作,vs则会进行强制检查(根据编译环境不同,处理环境也不相同),则不允许再继续使用,如果想继续使用的话,C++同样也给出了方案,可以看到erase会返回一个迭代器,而返回的迭代器就是下一个链表的位置。所以需要 it迭代器重新赋值就可以继续使用。

        4.list.swap

        

                5.list.clear

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

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

相关文章

认识git和git的基本使用,本地仓库,远程仓库和克隆远程仓库

本地仓库 #安装git https://git-scm.com/download/win #git是什么?有什么用? git相当于一个版本控制系统,版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 作用: 记录(项目&#…

物联网(IoT)支持的小型水处理厂实时硬件在环(HIL)仿真

这篇论文的标题是《Real-Time Hardware-In-The-Loop Simulation of IoT-Enabled Mini Water Treatment Plant》,作者是 Mohamad Taib Miskon 等人,发表在 2024 年 IEEE 自动控制与智能系统国际会议(I2CACIS)上。以下是该论文的主要…

【Agent】Agent Q: Advanced Reasoning and Learning for Autonomous AI Agents

1、问题背景 传统的训练Agent方法是在静态数据集上进行监督预训练,这种方式对于要求Agent能够自主的在动态环境中可进行复杂决策的能力存在不足。例如,要求Agent在web导航等动态设置中执行复杂决策。 现有的方式是用高质量数据进行微调来增强Agent在动…

vector 常见函数

目录 一.vector 构造函数 二 . Iterators 迭代器(random access iterator) 三.Capacity: 空间 3.1 resize 3.2 reserve 四.Element access: 元素访问 方式 4.1 operator[] 类似于数组的 [] 4.2 front 和back 五.Modifiers: 六.vector 的 二…

18、Gemini-Pentest-v2

难度 中 目标 root权限 一个flag 靶机启动环境为VMware kali 192.168.152.56 靶机 192.168.152.63 信息收集 web测试 访问80端口 上面介绍了一下这个系统是一个内部系统,让员工查看他们的个人资料还可以导出为PDF 页面还有一个链接是UserList可以访问但是页面什…

ES数据写入过程

1. 写入请求 当一个写入请求(如 Index、Update 或 Delete 请求)通过REST API发送到Elasticsearch时,通常包含一个文档的内容,以及该文档的索引和ID。 2. 请求路由 协调节点:首先,请求会到达一个协调节点…

微服务日常总结

1.当我们在开发中,需要连接多个库时,可以在yml中进行配置。 当在查询的时候,跨库时,需要通过DS 注解来指定,需要yml配置需要保持一致。 2. 当我们想把数据存入到clob类型中,需要再字段 的占位符后面加上j…

Zookeeper 官方示例2-SyncPrimitive 代码解读(二)

测试命令 java jar .\ZookeeperDemo-0.0.1-SNAPSHOT.jar bTest 192.168.206.100:2181 2 1. Barrier(阻塞原语) 1.1 概念 [!quote] A barrier is a primitive that enables a group of processes to synchronize the beginning and the end of a comput…

vulhub xxe靶机

先用御剑扫描出ip然后进入网页 进入robots.txt里面会发现俩个目录然后我们进去xxe里面 进入xxe页面进行登录&#xff0c;burp抓包 然后进入重放器 可以看到关于密码和用户名的是xml,那么就可以考虑用xxe注入 <?xml version"1.0" ?> <!DOCTYPE r [ <!…

监视SQL Server 内存使用量

文章目录 I 监视SQL Server 内存使用量确定页生存期确定当前的 SQL Server 内存利用率有关当前分配内存的信息II 等待资源池 %ls (%ld)中的内存资源来执行该查询时发生超时。 请重新运行查询。原因查看服务器级别设置的超时值资源信号灯 DMV sys.dm_exec_query_resource_semaph…

IP网络广播系统(IP网络广播系统是什么及它的优势与应用)

一、引言 在当今数字化的时代&#xff0c;音频传播技术也在不断革新。IP网络广播系统作为一种先进的音频传输解决方案&#xff0c;正逐渐在各个领域发挥重要作用。那么&#xff0c;究竟什么是IP网络广播系统呢&#xff1f;它又有着怎样独特的优势和广泛的应用呢&#xff1f;本…

深度学习(二)-损失函数+梯度下降

损失函数 损失函数&#xff08;Loss Function&#xff09;&#xff0c;也有称之为代价函数&#xff08;Cost Function&#xff09;&#xff0c;用来度量预测值和实际值之间的差异。 损失函数的作用 度量决策函数f&#xff08;x&#xff09;和实际值之间的差异。 作为模型性能…

检测CSRF漏洞的工具

免责声明此文档仅限于学习讨论与技术知识的分享&#xff0c;不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;本文作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担&…

二百五十九、Java——采集Kafka数据,解析成一条条数据,写入另一Kafka中(一般JSON)

一、目的 由于部分数据类型频率为1s&#xff0c;从而数据规模特别大&#xff0c;因此完整的JSON放在Hive中解析起来&#xff0c;尤其是在单机环境下&#xff0c;效率特别慢&#xff0c;无法满足业务需求。 而Flume的拦截器并不能很好的转换数据&#xff0c;因为只能采用Java方…

javascript数据结构与算法-- 二叉树

javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构。树是一种非线性的数据结构&#xff0c;以分成的方式存储数据&#xff0c;树被用来存储具有层级关系的数据&#xff0c;比如文件系统的文件&#xff0c;树还被用来存储有序列表。我们要研究的是二叉…

IObit Uninstaller Pro v13.6.0.5 绿色便携免安装版本 下载

功能非常强大好用的软件卸载清理工具 下载地址(资源制作整理不易&#xff0c;下载使用需付费&#xff0c;不能接受请勿浪费时间下载) 链接&#xff1a;https://pan.baidu.com/s/1I7lbixooii9ezSrp3X-y-w?pwd716l 提取码&#xff1a;716l

d3dcompiler_47.dll缺失的可能原因多种多样,那么d3dcompiler_47.dll缺失怎么修复

在数字世界的深处&#xff0c;d3dcompiler_47.dll文件扮演着至关重要的角色&#xff0c;它是Direct3D编译器的一部分&#xff0c;负责处理图形渲染和游戏运行中的关键任务。然而&#xff0c;当用户启动某个程序或游戏时&#xff0c;屏幕上突然弹出的错误提示“d3dcompiler_47.d…

苹果手机勿扰模式怎么关闭?4个方法快速关闭!

我们为了提升做事的效率以及保障休息的质量&#xff0c;在认真工作和学习&#xff0c;或者是晚上休息的时候&#xff0c;通常会打开苹果手机的勿扰模式。但当我们需要恢复苹果手机的消息通知时&#xff0c;苹果手机勿扰模式怎么关闭呢&#xff1f;今天&#xff0c;小编整理了4个…

机械学习—零基础学习日志(概率论总笔记2)

正态分布 高斯分布也叫做正态分布。假定事件A经过n次试验后发生了k次&#xff0c;把k的概率分布图画一下&#xff0c;就得到了一个中间鼓起&#xff0c;像倒扣的钟一样的对称图形。 18世纪&#xff0c;数学家棣莫弗和拉普拉斯把这种中间大&#xff0c;两头小的分布称为正态分布…

厨师帽佩戴识别摄像机

厨师帽佩戴识别摄像机 是一种用于识别厨师是否佩戴帽子的智能设备&#xff0c;其作用在于强制执行食品安全卫生标准&#xff0c;防止头发掉落入食物中。该摄像机利用人工智能和图像识别技术&#xff0c;能够识别厨师是否佩戴厨师帽。当摄像机检测到厨师未佩戴帽子时&#xff0c…