当前位置: 首页 > ai >正文

[C++] list双向链表使用方法

目录

  • 链表基本操作
    • 定义类
    • 使用类
      • 常规
      • 排序
      • 遍历
  • 链表存储原理

链表基本操作

定义类

双向链表有专门的头文件

#include <list>
// 当然如果你用<bits/stdc++.h>的话就也无所谓了

忽然想到一件事情, 不会有人不知道bits/stdc++.h是什么吧?传送!

双向链表这样定义

list<type> name;
// type: 链表每个元素的数据类型
// name: 链表名// 下面是一个例子:
list<int> ls;		// 后面讲操作的时候就以ls为例

使用类

常规

增删改查都在下面:

// 对链表开头操作
ls.push_front(x);	// 在ls开头添加x
ls.front();			// 返回ls开头元素
ls.pop_front();		// 删除ls开头元素// 对链表末尾进行操作
ls.push_back(x);	// 在ls末尾添加x
ls.back();			// 返回ls末尾元素
ls.pop_back();		// 删除ls末尾元素

一些特殊的方法:

ls.size();			// 返回ls的元素个数
ls.empty();			// 返回ls是否为空(空返回false, 否则true)
ls.clear();			// 清空ls

排序

ls.sort();						// 升序
// 可以把一个函数当作参数传入, 传入则按照函数实现的排序规则来排序, 类似algorithm中的sortls.sort(greater</*type*/>()); 	// 降序
// type替换为ls对应的数据类型
// 如果不是在std命名空间中, 则需要使用以下方法
ls.sort(std::greater</*type*/>());

遍历

由于链表没有索引, 我们使用迭代器(iterator)进行元素的访问, 进而实现遍历的功能.

ls.begin();		// 返回指向ls开头的迭代器
ls.end();		// 返回指向ls结尾的迭代器(最后一个元素的下一个位置)

这里比较难理解, 特别是end, 所以给大家配了一幅图
内存块图
理解到这里后, 就可以开始讲遍历了:

for(auto pos = ls.begin(); pos != ls.end(); pos++){// 元素使用*pos来访问
}

这里我们使用了C++11(或以上)特有auto, 如果版本较旧的话需要替换为list<type>::iterator, 把type替换为ls对应的数据类型.
如果你使用的是C++11(或以上), 推荐你使用一种更简便的方法:

for(int num : ls){// 元素为num
}

这种方法有一个弊端, 就是不能局部遍历.

链表存储原理

在这里插入图片描述

http://www.xdnf.cn/news/12558.html

相关文章:

  • 深入理解 Java 多线程:原理剖析与实战指南
  • 乐观锁与悲观锁的实现和应用
  • 统一点云数据格式:高效转换与属性保留
  • 微服务架构的性能优化:链路追踪与可观测性建设
  • 基于Python学习《Head First设计模式》第六章 命令模式
  • PHP 表单 - 验证邮件和URL
  • Java+Access综合测评系统源码分享:含论文、开题报告、任务书全套资料
  • 物联网智慧医院建设方案(PPT)
  • JMeter-SSE响应数据自动化2.0
  • # STM32F103 SD卡读写程序
  • JDK21深度解密 Day 15:JDK21实战最佳实践总结
  • Go语言堆内存管理
  • 如何在 Java 中优雅地使用 Redisson 实现分布式锁
  • ArcPy扩展模块的使用
  • 深入解析HarmonyOS5 UIAbility组件:从核心架构到实战应用
  • Clickhouse统计指定表中各字段的空值、空字符串或零值比例
  • uniapp- UTS 插件鸿蒙端开发示例 虽然我们这个示例简单 但是这个是难住很多人的一大步
  • 交互标牌——视觉货币(数字)转换器项目及源码
  • 企业微信授权登录(uniapp项目)
  • 零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
  • 第4章:Cypher查询语言基础
  • GenSpark vs Manus实测对比:文献综述与学术PPT,哪家强?
  • 深度解析:Spring Boot 配置加载顺序、优先级与 bootstrap 上下文
  • 数据通信与计算机网络——数据与信号
  • 好未来0520上机考试题2:有效三角形的个数
  • 青少年编程与数学 01-011 系统软件简介 07 iOS操作系统
  • ClusterRole 和 ClusterRoleBinding 的关系及使用
  • EPPLUS——CAD c#读写EXCEL的第三方库
  • 怎么让自己ip显示外省?一文说清操作
  • moon游戏服务器-demo运行