C++语言·list链表

        其实现在在讲这些容器的时候,我们的重点已经不是它的接口都有什么,功能都是什么了,这些内容官网上都能查到,而且容器和容器之间接口的不同处很少,我在讲解的话也只是把官网上的东西截图下来复述一下。现在的重点其实都是容器的下半节,也就是容器的实现。

        list容器是一个带头双向循环链表

1. 构造 析构 赋值重载

1.1 构造

        官网资料:list::list - C++ Reference

        C++98中的构造还是老几样,不用传参的默认构造,用n个val构造,用某段迭代区间构造,拷贝构造,不过C++11中的initializer_list构造我们也可以使用

1.2 析构

        官网资料:list::~list - C++ Reference

1.3 赋值重载

        官网资料:list::operator= - C++ Reference

        C++98中只提供一种赋值方案,但是C++11标准中还可以用initializer_list赋值

2. 迭代器

        begin和end没啥好说的,前面有r说明是reverse迭代器,也就是倒着的迭代器,前面载有c就是const迭代器const_iterator,不过这些我们都不常用,主要还是用begin和end

        因为list是带头双向循环链表,因此它的迭代器于之前string或vector的随机迭代器不同,list的迭代器是双向迭代器

3.容量操作

        之前提到过max_size返回容器目前的最大容量,不过这是一个相当鸡肋的功能

4. 访问容器内容

        访问容器内容还是提供了front、back两个成员函数,但是并没有提供operator[ ]了,这是因为链表的数据不是像顺序表那样的数组模式,无法 [ ] 随机访问某个元素,如果硬要写重载也行,但是效率低下,就是每次访问都遍历一下链表。

        也就是说,在链表中我们访问元素的方式完全变成了迭代器访问

                

5. 内容更改操作

        assign重新赋值,不过这个成成员函数需要的参数和构造很像

        push_front pop_front push_back pop_back,头插头删,尾插尾删,这些我们都很熟悉了

        insert随机位置插入,erase随机位置删除

        swap交换两个链表,resize reverse调整链表大小,clear清空链表

6. 更多特殊操作

6.1 splice 转移链表节点

        官网资料:list::splice - C++ Reference

        这个成员函数的功能就是将另一个链表 x 中的节点拿过来拼接进这个节点中。

        通过参数很简单可以看出,可以选择拼接一整条链表,或者链表中的某个节点,或者链表中用迭代器化出来的某段。

                

6.2 remove 删除存储某元素的节点

        官网资料:list::remove - C++ Reference

        和另一个有关删除的成员函数erase不同,erase是通过迭代器指定删除某些位置。而remove通过节点中存储的数据判断是否删除该节点

                

6.3 unique 相邻相同元素只保留一个

        官网资料:list::unique - C++ Reference

        unique是将相邻的相同元素只保留第一个,我们暂时只用它的第一种重载。所以说当我们想让一个链表中的每种元素只出现一次,就要先给这个链表排序,然后再用unique,排序是为了让相同的元素聚集到一起,否则删不干净。

        左边是链表没排序就unique,这样会保留下每组相同数据中的第一个数据。右边是链表sort之后再unique的效果,排序后相同的元素就都聚到一起了,那再删出来的效果就是每种数据都留下一个了。

6.4 sort 排序

        官网资料:list::sort - C++ Reference

        库函数中的sort要求传过去的迭代器必须是像vector或string那样的随机迭代器,而list的迭代器是双向迭代器,这种迭代器是不支持减法的,因此list不能使用标准库中的sort函数,因此list有特别供给自己使用的sort,也是默认排升序的效果,如果我们传一个greater<T>仿函数,就可以排降序。

        但是链表排序的时间消耗比较大,如果将链表中的数据用迭代区间拷贝构造法弄到顺序表中再排序,排序所需时间是比直接在链表中排序少3倍。

6.5 merge 合并有序链表

        官网资料:list::merge - C++ Reference

        这个成员函数的功能就是将两个有序链表合并成一个有序链表,合并完后被合并的有序链表x就变成了空链表

        ​​​​​​​        ​​​​​​​        

6.6 reverse 逆置

        官网资料:list::reverse - C++ Reference

        逆置整个链表,直接调用一下就好

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

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

相关文章

AtCoder Regular Contest 178 A~D

A.Good Permutation 2&#xff08;贪心&#xff09; 题意&#xff1a; 给你一个正整数 N N N和一个由 M M M个正整数 A ( A 1 , A 2 , … , A M ) A(A_{1},A_{2}, \dots,A_{M}) A(A1​,A2​,…,AM​)组成的序列。 在这里&#xff0c; A A A的所有元素都是介于 1 1 1和 N N …

网络编程-TCP

一、TCP的相关IP 1.1 SeverSocket 这是Socket类,对应到网卡,但是这个类只能给服务器使用. 1.2 Socket 对应到网卡,既可以给服务器使用,又可以给客户端使用. TCP是面向字节流的,传输的基本单位是字节. TCP是有连接的,和打电话一样,需要客户端拨号,服务器来听. 服务器的内核…

Stream流的使用

目录 一&#xff0c;Stream流 1.1 概述 1.2 Stream代码示例 二&#xff0c;Stream流的使用 2.1 数据准备 2.2 创建流对象 2.3 中间操作 filter map distinct sorted limit skip flatMap 2.4 终结操作 foreach count max&min collect 2.5 查找与匹配 a…

redis中String,Hash类型用法与场景使用

String 用法 1. 设置键值对 &#xff08;1&#xff09;设置键值对使用 set 命令设置 key 的值。 返回值&#xff1a;ok&#xff0c;如果 key 已经存在&#xff0c;set 命令会覆盖旧值。 &#xff08;2&#xff09;使用 setex 命令设置 key 的值并为其设置过期时间&#xff…

安全设计 | CISA:构建不可侵犯的代码,软件安全设计的未来之路

软件制造商在产品设计和开发过程中应采取安全设计原则和方法&#xff0c;以减少网络安全风险&#xff0c;并转变责任重心&#xff0c;使产品在设计时就内置安全特性&#xff0c;而不是依赖于后期的补丁和修复。为此CISA发布了《软件安全设计的原则和方法》&#xff0c;帮助软件…

兵器室管控系统|DW-306是一套成熟系统

概述 智慧兵器室管理系统&#xff08;DW-S306&#xff09;是依托互3D技术、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID智能仓库进行统一管理、分析的信息化、智能化、规范化的系统。 本解决方案利用现有内部网络&#xff0c;部署部队智能兵器室管理系统&#xff…

【Java】欸...?我学集合框架?真的假的?

【Java】欸…&#xff1f;我学集合框架&#xff1f;真的假的&#xff1f; Java集合框架 概述 Java集合框架主要由以下几个部分组成&#xff1a; 接口&#xff08;Interfaces&#xff09;&#xff1a;定义了集合的基本操作&#xff0c;如添加、删除、遍历等。实现&#xff0…

大语言模型的工程技巧(二)——混合精度训练

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 混合精度训练的示例请参考如下链接&#xff1a;regression2chatgpt/ch11_llm/gpt2_lora_optimum.ipynb 本文将讨论如何利用混合…

Java语法篇-易错

文章目录 类型转换switch case类之间关系及UMLtry catch finally 类型转换 隐式类型转换&#xff0c;不同数值类型参与计算时&#xff0c;低精度会转化为高精度参与运算 byte,short,char参与整数运算时会转成int float,int 参与浮点数运算时会转成double 强制类型转换 高精…

数据结构 —— 栈 与 队列

1.栈 1.1栈的结构和概念 栈&#xff08;Stack&#xff09;是一种特殊的线性数据结构&#xff0c;它遵循后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09;的原则。栈只允许在一端插入和删除数据&#xff0c;这一端被称为栈顶&#xff08;top&#xff09;&a…

c++引用和内联函数

一、引用 1.引用概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间。&#xff08;引用类型必须和引用实体是同种类型的&#xff09;&#xff0c;如&#x…

MySQL--联合索引应用细节应用规范

目录 一、索引覆盖 1.完全覆盖 2.部分覆盖 3.不覆盖索引-where条件不包含联合索引的最左则不覆盖 二、MySQL8.0在索引中的新特性 1.不可见索引 2.倒序索引 三、索引自优化--索引的索引 四、Change Buffer 五、优化器算法 1.查询优化器算法 2.设置算法 3.索引下推 …

2024年NGFW防火墙安全基准-防火墙安全功效竞争性评估实验室总结报告

Check Point 委托 Miercom 对 Check Point 下一代防火墙 (NGFW) 开展竞争性安全有效性测试&#xff0c; 选择的竞品分别来自 Cisco、Fortinet 和 Palo Alto Networks。对 Zscaler 的测试涉及他们的 SWG&#xff08;安全网关&#xff09;。测试内容包括验证防病毒、反恶意软件、…

SpringBoot+Vue开发记录(六)-- 后端配置mybatis

原型图什么的就先不管&#xff0c;后面再写。 本篇文章的主要内容就是springboot通过mybatis操作数据库实现增删改查。 重点是mybatis配置与相关文件数据&#xff0c;以后开新项目忘记了怎么配置的话可以再照着这个搞。 这算是最基础的部分了吧。 文章目录 一&#xff0c;配置…

基于STM32的自动宠物喂食器的Proteus仿真

文章目录 一、宠物喂食器1.题目要求2.思路2.1 OLED显示汉字2.2 DS1302模块2.3 液位传感器2.4 压力传感器和步进电机驱动 3.仿真图3.1 未仿真时3.2 开始仿真&#xff0c;OLED初始界面显示实时时间3.3 通过设置按键进入模式选择和喂食时间设置3.4 进入喂食时间设置3.5 设置好喂食…

计算机毕业设计Python+Spark+PyTroch游戏推荐系统 游戏可视化 游戏爬虫 神经网络混合CF推荐算法 协同过滤推荐算法 steam 大数据

毕业设计&#xff08;论文&#xff09; 基于SpringBoot的游戏防沉迷系统的设计与实现 摘 要 随着网络游戏市场的持续火爆,其最明显的负面影响----“网络游戏沉迷问题”已成为当前社会普遍关心的热点问题。根据2010年8月1日实施的《网络游戏管理暂行办法》&#xff0c;网络游…

图书管理系统——Java版

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaSE 顺序表的学习&#xff0c;点我 目录 图书管理系统菜单 基本框架&#xff1a; 书&#xff1a; 书架&#xff1a; 用户&#xff…

数字化转型必备:营销策划流程图,打造你的数字市场地图

制作营销策划流程图是一个系统化的过程&#xff0c;它可以帮助你清晰地规划和展示营销活动的各个阶段。 以下是制作营销策划流程图的步骤&#xff1a; 1.确定营销目标&#xff1a; 明确你的营销活动旨在实现的具体目标&#xff0c;比如提升品牌知名度、增加销售额、吸引新客…

Java进阶学习笔记25——Objects类

为啥比较两个对象是否相等&#xff0c;要用Objects的equals方法&#xff0c;而不是用对象自己的equals方法来解决呢&#xff1f; Objects&#xff1a; Objects类是一个工具类&#xff0c;提供了很多操作对象的静态方法供我们使用。 package cn.ensource.d14_objects;import ja…

Hadoop概览以及编译hadoop说明

一、Hadoop概述 Hadoop 是一个用于跨计算机集群存储和处理大型数据集的软件框架。它旨在处理大数据&#xff0c;即传统数据库无法有效管理的极其庞大和复杂的数据集。Hadoop不是传统意义上的数据仓库&#xff0c;因为它们的用途不同&#xff0c;架构也不同。Hadoop 是一个跨分布…