list的使用及其相关知识点

目录

  ◉list的底层逻辑

  ◉关于list的新增功能

  ▲splice功能

  ▲remove函数

  ▲unique函数

 ▲merge函数

  ▲sort函数

  ▣迭代器类型

  ▲reverse函数

  作为数据容器之一的list和其他容器的使用上有很多相似的地方,比如都有大致相同的构造函数,大致相同的头插尾插,头删尾删函数。因此对于重复的内容我们就不在赘述,直接介绍关于list和其他数据结构容器不相同的使用方法。

  list的底层逻辑

  我们的list底层是使用带头双向循环链表实现的。所以list具有链表的特征——在插入数据的时候不需要进行数据的移动,效率很高。同时由于是带头双向循环链表。所以我们还可以通过只想尾节点的指针快速的找到最后一个节点的指针大大的提高了效率。

  由于我们的list是链表的结构。链表并不支持随机读取,如果使用随机读取的话,程序的运行效率会大大降低,所以设计者为了避免大家犯这种错误,没有提供[ ]运算符重载的接口。所以我们在想要遍历链表的时候只能使用迭代器。

  但是在使用迭代器的时候,还有很多需要注意的事项:由于我们的链表每一个元素所存储的位置并不连续所以我们的list同样没有支持+/-等函数接口。如果想要使用迭代器进行list对象的查找,我们只能通过对迭代器进行++操作进行。或者直接使用范围for(实际上也是迭代器)

  同时还需要我们注意一点:由于我们的链表不是顺序存储,所以我们的循环判断条件不能是tmp<l1.end() 而应该是不等于!!!

  关于list的新增功能

  splice功能

  splice函数的作用是将另外链表上的节点截取下来链接到该链表的指定位置上面。同样的我们也可以使用该函数取下本链表上的节点,重新链接到指定的位置达到我们的预期效果。使用方式如下:

  remove函数

  

  该功能仅仅是删除链表当中等于某一个值的节点,我们直接使用即可。

  unique函数

  该函数的作用是去除链表当中重复的数据,但是在使用的时候我们需要注意:该函数只能对有序的链表执行去重操作,因此我们必须先对链表进行排序操作。

  

  我们会发现第一遍去重操作并没有成功,因此我们需要注意在去重之前一定要保证链表当中的元素有序。

  merge函数

  该函数的作用是将两个链表进行归并产生一个新的有序的链表。同样的我们在使用该函数之前需要保证我们的链表当中的数据是有序的。

  函数的第二个参数是一个比较器,我们可以手动编写一个比较函数规定归并的方式。

  sort函数

  

  该函数的作用是对链表当中的数据进行排序。相信大家看到这个函数的时候都会想到另外一个sort函数。没错,就是我们algorithm库当中提供的sort函数。那么这两个排序函数有什么区别呢?

  我们来进行比较:

  仔细观察我们会发现,库函数当中的sort参数是一个一个的迭代器。并且类型都是自定义出来的Random迭代器。那么这个有没有什么讲究呢?我们的list能不能通过迭代器进行排序呢?

  我们会发现在尝试使用迭代器进行sort排序的时候出现了系统报错。这是因为我们的迭代器的类型不匹配。

  查找文档我们可以发现list的迭代器类型是bidirectional。该迭代器是一个双向的迭代器。

  迭代器类型

  这个时候就要向大家介绍我们数据结构当中所使用到的迭代器的类型了。在我们的数据结构当中一共存在三种迭代器种类。一种是单向迭代器,一种是双向迭代器,一种是随机迭代器。

  其中单项迭代器主要由单链表等数据结构进行使用,双向迭代器主要由list和deque等数据结构进行使用,随机迭代器主要由vector和string等数据结构进行使用,对于不同的迭代器使用的场景以及功能也是不同的。

  对于单向迭代器我们只允许进行++操作,对于双向迭代器我们允许进行++/--操作,对于随机迭代器我们允许++/--/+/-操作。

vector的迭代器类型:random iterator

list的迭代器类型:bidirectional iterator

  forward_list的迭代器类型:forward iterator

    这就是我们的list不能使用系统库当中的sort的原因。

   但是我们不能过分依赖于list当中的sort函数。list当中的sort函数仅仅是为了给我们提供方便而已。对于小规模数据的处理还可以,但是对于大规模的数据,由于容器的特性的原因效率很低。所以我们还是推荐使用vector进行数据的排序操作。

  reverse函数

  

  该函数的作用就是将链表当中的数据进行逆置操作。同样的,我们的系统std库当中也拥有相同功能的reverse函数。

  我们会发现该函数的迭代器类型是一个双向迭代器,因此可以正常使用。

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

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

相关文章

【Java】—— Java面向对象基础:Java中如何创建和使用三角形类(TriAngle)来计算面积

目录 第一步&#xff1a;定义TriAngle类 第二步&#xff1a;编写TriAngleTest测试类 运行程序 总结 在Java编程中&#xff0c;面向对象的编程思想是一种非常强大的工具&#xff0c;它允许我们将现实世界中的实体&#xff08;如三角形&#xff09;抽象成程序中的类&#xff…

Python+tkinter实现2048游戏

游戏规则 2048 是一个单人拼图游戏&#xff0c;目标是通过滑动方块将相同数字的方块合并&#xff0c;最终得到一个数字为 2048 的方块。 游戏在一个 4x4 的网格上进行&#xff0c;初始时有两个方块&#xff0c;每个方块的值为 2 或 4。玩家可以通过上下左右方向键滑动方块&am…

微服务间调用

一、restTemplate 1、先将restTemplate注册成为一个bean Configuration public class RemoteCallConfig {Beanpublic RestTemplate restTemplate() {return new RestTemplate();} }2、实现代码 private void handleCartItems(List<CartVO> vos) {// TODO 1.获取商品id…

【C++ Primer Plus习题】6.4

问题: 解答: #include <iostream> using namespace std;const int strsize 40; const int usersize 40;typedef struct _Bop {char fullname[strsize];char title[strsize];char bopname[strsize];int preference; }Bop;Bop bop_user[usersize] {{"Wimp Macho&q…

使用Python调用JavaScript进行网页自动化操作

随着互联网技术的飞速发展&#xff0c;网页自动化操作在数据抓取、用户界面测试、内容管理等多个领域变得越来越重要。Python作为一种流行的编程语言&#xff0c;因其简洁的语法和强大的库支持&#xff0c;成为了许多开发者进行网页自动化的首选工具。然而&#xff0c;面对动态…

【C++ Primer Plus习题】6.8

问题: 解答: #include <iostream> #include <fstream> #include <string> using namespace std;int main() {string filename;ifstream stream;char read_char;int count0;cout << "请输入要打开的文件:";getline(cin, filename);stream.op…

微分方程(Blanchard Differential Equations 4th)中文版Section5.1

平衡点分析 从第3章的工作中,我们能够对线性系统的解有定性和解析的理解。不幸的是,非线性系统通常不容易使用我们开发的解析和代数技术来分析,但我们可以利用线性系统的数学来理解非线性系统在其平衡点附近的行为。 Van der Pol 方程 为了说明如何分析平衡点附近解的行为…

输电线路分布式故障诊断系统:分布式智慧网络的构建

输电线路分布式故障诊断系统&#xff1a;分布式智慧网络的构建 今天&#xff0c;就让深圳鼎信智慧科技陪大家一起走进输电线路分布式故障定位系统的世界&#xff1a; 1、系统架构&#xff1a;分布式智慧网络的构建 输电线路分布式故障定位系统主要由三大核心部分组成&#x…

数据结构(6.4_2)——最短路径问题_BFS算法

最短路径问题 BFS求无权图的单源最短路径 原代码 改造visit函数后

Elastic日志分析

目录 介绍步骤 介绍 Elasticsearch 是在 Apache Lucene 上构建的分布式搜索和分析引擎。Elasticsearch常用于日志分析、全文搜索、安全智能、业务分析和运维智能使用案例。 可以使用 JSON 文档形式或通过 API 等将数据发送到 Elasticsearch。 Elasticsearch 自动存储原始文档…

Launcher3 长按Hotseat图标,显示删除角标(红底白杠杠用于删除图标或者显示应用未读消息数量)

基于Android 13,Launcher3实现需求&#xff1a; 1. 长按Hotseat的图标显示红色删除角标 2. 点击角标&#xff0c;删除图标并保存到Database 3.点击其他地方&#xff0c;取消编辑hotseat图标模式 实现效果&#xff1a; 实现原理&#xff1a; 图标是由BubbleTextView来是实现…

数据库系统入门指南

数据库系统入门指南 数据库系统是现代信息技术的重要组成部分。本文将介绍数据库、数据库管理系统、数据库应用系统以及相关概念&#xff0c;帮助初学者快速上手。 什么是数据库&#xff1f; 数据库是一个有组织、可共享的数据集合。它存储在计算机中&#xff0c;数据按一定…

idea import配置

简介 本文记录idea中import相关配置&#xff1a;自动导入依赖、自动删除无用依赖、避免自动导入*包 自动导入依赖 在编辑代码时&#xff0c;当只有一个具有匹配名称的可导入声明时&#xff0c;会自动添加导入 File -> Settings -> Editor -> General -> Auto Imp…

FL Studio24苹果mac电脑破解绿色版安装包下载

FL Studio 24最新版本&#xff0c;这可不仅仅是一个音乐制作软件的升级&#xff0c;它是音乐创作爱好者的福音&#xff0c;是专业制作人的心头好。那么&#xff0c;它究竟有哪些魔力&#xff0c;能让这么多人为之疯狂呢&#xff1f; 我们来看看它的界面。FL Studio 24的界面设…

Nginx: 负载均衡基础配置, 加权轮序, hash算法, ip_hash算法, least_conn算法

负载均衡 在真正的反向代理场景中&#xff0c;必然涉及到的一个概念&#xff0c;就是负载均衡所谓负载均衡&#xff0c;也就是将Nginx的请求发送给后端的多台应用程序服务器通常的应用程序服务器&#xff0c;后面的每台服务器都是一个同等的角色&#xff0c;提供相同的功能 用…

类与ES6类之间的继承

前言 ● 下面是之前学习ES6 classes的代码 class PersonCl {constructor(fullName, birthYear) {this.fullName fullName;this.birthYear birthYear;}calcAge() {console.log(2037 - this.birthYear);}greet() {console.log(你好${this.fullName});}get age() {return 2037…

debian12 - openssh-9.6.P1的编译安装(真机 - 联想G480)

文章目录 debian12 - openssh-9.6.P1的编译安装(真机 - 联想G480)概述笔记G480上安装debian12配置debian12现在用WindTerm_2.6.0按照telnet方式去连接试试配置debian12中的telnet安装telnet服务查看所有服务当前ssh, telnet状态准备更新openssl3.2和openssh在真机上更新openssl…

自动分词代码

代码 from wordsegment import load, segment# 加载模型 load()# 示例 actions ["seeyoulater","turnleft","turnr" ]segmented_actions [segment(action) for action in actions] segmented_actions [" ".join(action) for actio…

云计算概述

云计算的产生以及发展 分布式计算&#xff1a;包含了云计算和网格计算 云计算&#xff1a;以数据为中心进行的计算 网格计算&#xff1a;以计算为中心进行的计算 诞生-1999 初期的发展-2007-2008 加速发展-2009-2014 日渐成熟阶段-2015-目前 云计算的种类 公有云-第三方提供…

chapter08-面向对象编程——(chapter08作业)——day10

343-作业01 package chapter08.homeworks;public class Homework01 {public static void main(String[] args) {/*1.定义一个Person类{name, age, job},初始化Person对象数组&#xff0c;有3个person对象&#xff0c;并按照age从大到小进行排序,提示&#xff0c;使用冒泡排序 H…