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

7.list

本篇博客梳理C++的STL中的list容器

一、list的基本结构与使用

1.list的介绍

list的底层是带头循环双向链表
list的结构
带头:含哨兵位
循环:尾节点的next指针指向哨兵位
双向:每个节点具有两个指针域,一个指针指向前一个结点

2.list的使用

(1)list的构造函数

构造函数接口说明
list (size_type n, const value_type& val = value_type()用n个val值构造list
list()构造空的list
list(const list& x)拷贝构造
list(InputIrerator first,InputIrerator last)用(first,last)区间中的元素来构造list

(2)迭代器

函数声明接口说明
begin/end返回第一个元素的迭代器/返回最后一个元素下一个位置的迭代器
rbegin/rend返回第一个元素的位置(即end处)/返回最后一个元素的下一个位置(即begin)

迭代器的分类:
① 功能上
功能上的分类

② 性质上

性质上的分类
实际上,迭代器的性质由STL的底层结构决定
单向迭代器:只支持单向遍历
双向迭代器:支持双向遍历,支持++和–,但不支持一下子+或者-多个单位
随机迭代器:支持随机访问,也就是既支持++和–,也支持+n和-n

(3)容量相关函数

函数声明接口说明
empty检查list是否为空,是则返回true,不是则返回false
size返回list中有效元素的个数

(4)头,尾元素的访问

函数声明接口说明
front返回list第一个值的引用
back返回list最后一个值的引用

(5)增删查改

函数声明接口说明
push_front在list的第一个元素前面插入值为val的元素
pop_front删除list中第一个元素
push_back在list尾部插入值为val的元素
pop_back删除list中最后一个元素
insert在list的pos位置处插入值为val的元素
erase删除list的pos位置处的元素
swap交换两个list中的元素
clear清空list中的有效元素

(6)list支持的sort函数(std标准库库里面没支持)

sort函数

#include <iostream> 
using namespace std;
#include <vector> 
#include <list>
int main()
{vector<int> v = { 6,3,7,8,3,5,8,1,2,9 };list<int> lt(v.begin(), v.end());lt.sort();//默认排成升序for (auto e : lt){cout << e << " ";}cout << endl;greater<int> gt;lt.sort(gt);//排成降序for (auto e : lt){cout << e << " ";}cout << endl;less<int> ls;lt.sort(ls);//排成升序for (auto e : lt){cout << e << " ";}cout << endl;return 0;
}

运行结果

(7)merge函数:合并两个有序链表

#include <iostream> 
using namespace std;
#include <list>int main()
{list<int> lt1;lt1.push_back(3);lt1.push_back(4);lt1.push_back(2);lt1.sort();list<int> lt2;lt2.push_back(8);lt2.push_back(7);lt2.push_back(9);lt2.sort();lt1.merge(lt2);for (auto e : lt1){cout << e << " ";}return 0;
}

运行结果
注意,此时lt2已经被清空

http://www.lryc.cn/news/532965.html

相关文章:

  • Qt+海康虚拟相机的调试
  • 数据库基础练习4(有关索引,视图完整解答)
  • 实操给触摸一体机接入大模型语音交互
  • Excel中对单列数据进行去重筛选
  • K8s —基础指南(K8s - Basic Guide)
  • ABAP开发中的前导零和末尾零
  • Baklib赋能数字内容体验个性化推荐提升用户体验的未来之路
  • 关于Redis的持久化
  • 【C语言标准库函数】指数与对数函数:exp(), log(), log10()
  • 2024美团春招硬件开发笔试真题及答案解析
  • Python内置函数map(), list(), len(), iter(), hex(), hash()的详细解析,包括功能、语法、示例及注意事项
  • [LVGL] 在VC_MFC中移植LVGL
  • MySQL视图索引操作
  • 一次奇怪的空指针问题分析:事务、死锁与隐式回滚
  • 解决aspose将Excel转成PDF中文变成方框的乱码问题
  • .net8.0使用EF连接sqlite数据库及使用Gridify实现查询的简易实现
  • 2025.2.5——五、[网鼎杯 2020 青龙组]AreUSerialz
  • 电风扇各国检测认证详细介绍美国FCC+UL欧盟CE+ROHS日本PSE+METI备案+英国UKCA
  • Flutter Isolate解决耗时任务导致卡死
  • 使用deepseek快速创作ppt
  • STM32的HAL库开发---高级定时器---输出比较模式实验
  • python Excel 表读取合并单元格以及清除空格符
  • 额外题目汇总2-链表
  • C#控件开发6—指示灯
  • 探索从传统检索增强生成(RAG)到缓存增强生成(CAG)的转变
  • 【学习总结|DAY036】Vue工程化+ElementPlus
  • 【GitHub】GitHub 2FA 双因素认证 ( 使用 Microsoft Authenticator 应用进行二次验证 )
  • c# 2025/2/7 周五
  • 蓝桥杯思维训练(五)
  • I.MX6ULL 中断介绍下