尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

深入解析:list的学习

深入解析:list的学习
📅 发布时间:2026/6/20 13:21:55

深入解析:list的学习

2025-09-26 15:31  tlnshuju  阅读(0)  评论(0)    收藏  举报

1、list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代

2、list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向前一个或后一个元素

3、list与forward_list非常相似,但forward_list只能朝前面迭代

4、list的缺点就是不能随机访问 ,你只能从已知位置(头节点或尾节点遍历过去去找)

list的接口较多

我们去学常见的重要接口


list的构造

构造函数(constructor)

list(size_t n,const value_type &val=value_type())            构造的list中包含n个值为val的元素

list()                                       构造空的list

list(const list& x)                       拷贝构造函数

list(inputiterator first,inputiterator last)                 用(first,last)区间中的元素构造list

list iterator的使用

这地方把迭代器暂时理解成指针,该指针指向list中的一个节点

begin+end                    返回第一个元素的迭代器+返回最后一个元素下一个位置的迭代器

rbegin+rend                  颠倒过来


list capacity

empty               检测list是否为空 ,是返回true,不是返回false

size                返回list中有效节点个数

list element access

front                     返回list的第一个节点中值的引用

back                        返回list的最后一个节点中值的引用

push_front             在list首元素前插入值为val的元素

pop_front              删除list中的第一个元素

push_back            在list尾部插入值为val的元素

pop_back              删除list中最后一个元素

insert              在指定的这个位置插入值val

erase                  删除指定位置的元素

swap                    交换两个list中的元素

clear                     清空list中的有效元素

因为要考虑迭代器失效的可能(在删除时所指向节点的消失)

#include
#include
using namespace std;
void test()
{
int array[] = { 1,2,3,4,5,6,7 };
list l(array, array + sizeof(array) / sizeof(array[0]));
auto it =l.begin();
while (it != l.end())
{
it=l.erase(it);
}
}

反向迭代器

template
class reverseiterator
{
public:
typedef typename iterator::ref   ref;
typedef typename  iterator::ptr  ptr;
typedef  reverseiterator  self;
public:
reverseiterator(iterator it)
:_it(it)
{ }
ref operator*()
{
iterator temp(_it);
--temp;
return *temp;
}
ptr operator->()
{
return &(operator*());
}
self& operator++()
{
--_it;
return *this;
}
self& operator++(int)
{
self temp(*this);
--_it;
return temp;
}
self& operator--()
{
++_it;
return *this;
}
self& operator(int)
{
self temp(*this);
++_it;
return temp;
}
bool operator!=(const self& l)const
{
return _it != l._it;
}
bool operator==(const self& l)const
{
return _it == l._it;
}
iterator _it;
};

vector                                         和                                              list的区别

1、动态顺序表,一段连续空间                                               带头节点的双向循环链表

2、支持随机访问,o(1)                                                        不支持随机访问为,o(n)

3、任意位置插入和删除效率低,需要搬移元素,                       任意位置插入删除效率高,为o(1)

时间复杂 度为O(N),插入时有可能需要增容,增容:

开辟新空 间,拷贝元素,释放旧空间,导致效率更低

4、原生态指针                                                                          对原生态指针封装

5、在插入元素时,要给所有迭代器重新赋值,                            插入不影响,删除会导致当前迭                                                                                                            代器失效

因为插入元素有可能导致扩容,导致迭代器失效,删除时,

当前迭代器要重新赋值或则失效

相关新闻

  • 实用指南:用Playwright实现接口自动化测试:从基础到实战
  • 数据质量定胜负:Apple 如何破解双语大模型性能鸿沟
  • 实用指南:Agent智能体+DeepSeek全教程:零基础到精通,一键生成可视化报表!

最新新闻

  • ARM中断与VIC控制器实战:从原理到配置与避坑指南
  • LPC210x ARM7 ADC与定时器实战:从寄存器配置到驱动代码
  • 北京家里漏水总反复?北京靠谱漏水检测公司实用参考 - 速递信息
  • 本地部署大模型实战指南:Ollama+DeepSeek+Qwen2全链路踩坑与优化
  • 如何快速获取网盘真实下载地址:3步搞定九大平台
  • Trae:AI原生开发的操作系统与MCP技能调度范式

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号