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

[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.lqws.cn/news/198973.html

相关文章:

  • 嵌入式学习笔记 - freeRTOS vTaskPlaceOnEventList()函数解析
  • wpf的converter
  • 【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析
  • Puppeteer API
  • 每日Prompt:治愈动漫插画
  • ubuntu20使用自主探索算法explore_lite实现机器人自主探索导航建图
  • Keil开发STM32生成hex文件/bin文件
  • 数据结构之栈
  • 《绩效管理》要点总结与分享
  • 大数据(2) 大数据处理架构Hadoop
  • Linux(13)——Ext系列文件系统
  • jenkins gerrit-trigger插件配置
  • Python Copilot【代码辅助工具】 简介
  • 数据库系统概论(十七)超详细讲解数据库规范化与五大范式(从函数依赖到多值依赖,再到五大范式,附带例题,表格,知识图谱对比带你一步步掌握)
  • Docker容器部署elasticsearch8.*与Kibana8.*版本使用filebeat采集日志
  • SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
  • 阿里云MaxCompute入门
  • Fetch与Axios:区别、联系、优缺点及使用差异
  • 使用Python和Scikit-Learn实现机器学习模型调优
  • LinkedList、Vector、Set
  • ⚡️ Linux Docker 基本命令参数详解
  • 开源之夏·西安电子科技大学站精彩回顾:OpenTiny开源技术下沉校园,点燃高校开发者技术热情
  • C++2025.6.7 C++五级考题
  • 在Ubuntu上使用 dd 工具制作U盘启动盘
  • 【hadoop】相关集群开启命令
  • STM32的系统滴答定时器简述
  • 在 Win10 上 WSL 安装 Debian 12 后,Linux 如何启动 SMTP 服务?
  • 人工智能--AI换脸
  • 【工作记录】接口功能测试总结
  • 基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql数据库,在线考试系统