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

C++(初阶)(十一)——list

十一,list

带头循环双向链表。

遍历方式:迭代器,不再支持operate[],operate[]适用于底层是数组的结构。

remove删除值,如果有多个相同的值,都会删除。
在这里插入图片描述

接口介绍

下面会介绍list的一些接口

构造

构造函数(constructor接口说明注意点
list (size_type n, const value_type& vall = value_type())构造的list中包含n个值为val的元素
list()构造空的list
list (const list& x)拷贝构造函数
list (InputIterator fifirst, InputIterator last)用[first, last)区间中的元素构造区间是左开右闭的,并且list并不支持+,-的操作
构造使用与遍历

[list构造与遍历](https://gitee.com/any10/c_plus_plus/blob/master/2025c%2B%2B/list_4_13_ 接口/list构造与遍历/test.cpp)

1,begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动

2,rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动

Modifiers(修饰语句)

函数名接口说明函数声明
push_front在list首元素前插入值为val的元素void push_front (const value_type& val);void push_front (value_type&& val);
pop_front删除首元素void pop_front();
push_back尾部插入值为val的元素void push_back (const value_type& val);void push_back (value_type&& val);
pop_back删除尾元素void pop_back();
insert在list position位置插入值为val的元素insert
erase删除list position位置的元素iterator erase (const_iterator position);iterator erase (const_iterator first, const_iterator last);
swap交换两个list中的元素void swap (list& x);
clear清空list中的有效元素void clear() noexcept;(noexcept该关键字告诉编译器,函数中不会发生异常,这有利于编译器对程序做更多的优化。)
简单使用

[list插入删除](https://gitee.com/any10/c_plus_plus/blob/master/2025c%2B%2B/list_4_13_ 接口/list插入删除/test.cpp)

模拟实现

初步实现

完善

list和vector的对比

vectorlist
底层结构动态顺序表,一段连续空间带头结点的双向循环链表
随机访问支持随机访问,访问某个元素效率为O(1)不支持随机访问,访问某个元素效率为O(N)
插入和删除任意位置插入和删除效率低,需要搬移元素,时间复杂度为O(N),插入时有可能需要增容,增容:开辟新空间,拷贝元素,释放旧空间,导致效率更低任意位置插入和删除效率高,不需要搬移元素,时间复杂度为O(1)
空间利用率底层为连续空间,不容易造成内存碎片,空间利用率高,缓存利用率高底层节点动态开辟,小节点容易造成内存碎片,空间利用率低,缓存利用率低**
迭代器原生态指针对原生态指针(节点指针)进行封装**
迭代器失效在插入元素时,要给所有的迭代器重新赋值,因为插入元素有可能会导致重新扩容,致使原来迭代器失效,删除时,当前迭代器需要重新赋值否则会失效插入元素不会导致迭代器失效,删除元素时,只会导致当前迭代器失效,其他迭代器不会受影响
使用场景需要高效存储,支持随机访问,不关心插入删除效大量插入和删除操作,不关心

vector

优点:1,支持下标访问。

2,CPU高速缓存命中率高。

缺点:1,头部和中部插入删除效率低下,因为要挪动数据。

2,扩容有一定成本,存在一定空间浪费。

list

缺点:1,不支持下标随机访问。

2,CPU高速缓存命中率低。

优点:1,任意位置可以O(1)插入删除,不需要挪动数据。

2,不需要扩容,按需申请释放,不浪费空间。

CPU要访问内存一个数据,要看这个数据是否在缓存,在就叫缓存命中,不在就是不命中;不命中就要先加载到缓存,然后在访问缓存。

关于CPU缓存:https://coolshell.cn/articles/20793.html

相关文章:

  • 数据结构实验6.1:矩阵的螺旋方阵输出
  • 在ArcGIS Pro中将栅格NoData值修改为特定值
  • QEMU源码全解析 —— 块设备虚拟化(19)
  • 【项目管理】第12章 项目质量管理-- 知识点整理
  • JavaScript 输入输出语句
  • Docker 部署 Kafka 完整指南
  • 系统编程3(共享内存/信号量)
  • 【数据结构与算法】——堆(补充)
  • 人的需求更多是动物本能—观《枪王》
  • 计算视觉与数学结构及AI拓展
  • 【家政平台开发(41)】家政平台性能蜕变:性能测试与优化全解析
  • Spring Boot 中应用的设计模式
  • Spring Security + JWT 实现前后端分离权限控制实战教程
  • 机器人仿真:URDF与Gazebo
  • 学习MySQL的第九天
  • 【C++】 —— 笔试刷题day_15
  • Spring - 14 ( 5000 字 Spring 入门级教程 )
  • Linux网络http与https
  • LeetCode面试热题150中6-11题学习笔记(用Java语言描述)
  • 通过 spring ai 对接 deepseek ai 大模型通过向量数据库,完成 AI 写标书及构建知识库功能的设计与开发
  • 王毅将主持召开第三次中国—太平洋岛国外长会
  • 高温最强时段来了!北方局地高温有明显极端性
  • 上海明天短暂恢复晴热最高32℃,一大波雨水在候场
  • 东航C919航线上新!正式投入上海虹桥—深圳航线运营
  • 国际博物馆日|航海博物馆:穿梭于海洋神话与造船工艺间
  • 全国林业院校校长论坛举行,聚焦林业教育的创新与突破