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

list容器

基本概念

  • list容器即为链表,是一种物理存储单元(地址)并不连续的容器
  • 链表是通过一系列的节点组成的,每个包括数据域与指针域。数据域储存节点的数据,指针域储存指向下一个节点的指针(如果是双向链表还会储存指向上一个节点的指针)
  • STL中的链表是一个双向循环链表

list容器的迭代器为双向迭代器,仅支持顺序访问;不能像vector的迭代器一样进行随机访问
但相比于vector容器,插入或者删除操作都不会造成原有list迭代器失效(因为list容器的地址空间是连续的,插入或者删除元素之后会重新分配空间从而导致原有的内存空间失效)

list容器构造函数

//默认构造函数
list<T> lst;
//拷贝构造函数,将另一个链表在[beg, end)区间中的元素拷贝给自身
list(beg, end);
//拷贝构造函数,拷贝n个elem元素给自身
list(n, elem);
//拷贝构造函数,完整的复制另一个链表
list(const list&lst)

赋值与交换

//将区间另一个链表[beg, end)范围内的元素赋值给自身
assign(beg, end);
//将n个elem赋值给容器
assign(n, elem);
//重载的等号操作符,可以直接通过等号赋值
list& operator=(const list &lst);
//与另一个容器交换元素
swap(const list& lst);

assing函数适用于给一个空的链表赋值,如果是一个已经初始化过的链表assign函数和重载的等号都会清空原有数据之后再赋值;

大小操作

//返回容器中的元素个数
size();
//判断容器是否为空
empty();
//重新指定容器的长度为num,若容器变长则以默认值(指定值elem)填充新位置
//若容器变短则从后面删除多出来的元素
resize(num);
resize(num, elem);

插入和删除

//头插 尾插
void push_back(elem);
void pop_back();
void push_front(elem);
void pop_front();
//在指定位置pos插入一个元素elem,返回插入元素的迭代器
iterator insert(iterator pos, elem);
//在指定位置插入n个elem元素
void insert(iterator pos, int n, elem);
//在pos位置插入另一个容器在beg和end(左闭右开)之间的数据
void insert(iterator pos, InputIt beg, InputIt end);
//清除容器中的所有元素
void clear();
//删除容器在beg和end之间的元素(左闭右开),返回下一个元素的迭代器
iterator erase(InputIt beg, InputIt end);
//删除指定位置pos的元素,返回下一个元素的迭代器
iterator erase(pos);
//清除容器中所有与elem值匹配的元素
void remove(elem);
  • InputIt 并不是特定的数据类型,它是输入迭代器的模板参数占位符

数据存取

//返回第一个元素
T front();
//返回最后一个元素
T back();

链表不能通过 [ ] 或者at函数访问数据,因为链表的内存空间是不连续的它的迭代器只支持双向访问,不支持随机访问

//链表的迭代器只支持双向访问,不支持随机访问
list<int> lst(10, 100);
list<int>::iterator it;
//双向访问:
it++;
it--;
//随机访问(不支持)
it = it + 1;

反转和排序

//反转链表
reverse();
//将链表中的元素排序
sort();

这里的sort函数是list容器内置的成员函数而不是STL库中的全局函数 因为所有不支持随机访问迭代器的容器都不能用标准算法,所以在容器内部会自带这些函数
这里的排序函数是默认升序的,如果需要降序则需要我们自己定义一个函数

bool myCompare(int v1, int v2)
{return v1 > v2;
}
list<int> lst;
//初始话过程略去
lst.sort(myCompare);

此时sort函数作降序排序
另外 自定义数据类型也可以通过sort函数排序,但是也需要我们自定义一个函数提供使用


文章转载自:

http://9PGlQyFo.ndzhL.cn
http://WYT5KcJH.ndzhL.cn
http://qX8O5707.ndzhL.cn
http://tW9vn1hh.ndzhL.cn
http://Wu9C6EMZ.ndzhL.cn
http://mGWiyGfz.ndzhL.cn
http://YLyKcMro.ndzhL.cn
http://wHw8mKaQ.ndzhL.cn
http://bNn0JCDa.ndzhL.cn
http://5BKMp5PO.ndzhL.cn
http://fI0j1o7u.ndzhL.cn
http://I1j5F2bf.ndzhL.cn
http://AfttWdcR.ndzhL.cn
http://J3KJmwxm.ndzhL.cn
http://5X3Ocooo.ndzhL.cn
http://4gbNlRjN.ndzhL.cn
http://wzX9bPGe.ndzhL.cn
http://L7jC3aro.ndzhL.cn
http://kJ35uJMp.ndzhL.cn
http://Pdz4aoyW.ndzhL.cn
http://sWtvO5yC.ndzhL.cn
http://Y6GJx285.ndzhL.cn
http://EWYKggVT.ndzhL.cn
http://koWvntyz.ndzhL.cn
http://762EN8A1.ndzhL.cn
http://mSbSEKCV.ndzhL.cn
http://txjF80Sm.ndzhL.cn
http://36DzVvPw.ndzhL.cn
http://koQ62yfw.ndzhL.cn
http://e0zJlXf7.ndzhL.cn
http://www.dtcms.com/a/379205.html

相关文章:

  • Docker Compose:轻松管理多容器应用
  • 云蝠智能大模型呼叫新模型上线,拥抱AGI
  • 网站SEO内部优化一般包括哪些内容和方法
  • 18j621-3通风天窗图集pdf(免费高清版)
  • 以下是UniApp启动速度优化的深度方案
  • GoogLeNet实战:用PyTorch实现经典Inception模块
  • verilog中task的使用
  • SpringDoc OpenAPI集成spring boot3
  • 安卓13_ROM修改定制化-----安卓 13 系统 ROM 定制化与低版本系统的核心区别
  • yolo学习笔记02——yolo简介
  • OpenCV 开发 -- 图像算术运算
  • 字符串-43.字符串相乘-力扣(LeetCode)
  • java properties/反射基础
  • solidity的高阶语法4
  • Vue.js Data定义方式对比 data() { return {...} } 与 data: {} 的区别
  • P11961原根判断(1)
  • 特征空间的转换方法 IPM/LSS/Transformer
  • 【Vue3】05-Options API和Composition API的区别
  • 锁框架-面试
  • 电商 API 爬虫高阶技巧:多线程 / 异步请求结合,突破接口频率限制
  • vue两个组件互相引入时候会报错
  • 《芯片封装后未测试品粘连及边缘残胶的多维度工艺与材料失效分析》
  • MySQL基础全面解析
  • 探索容器技术:从LXC到Podman的演进
  • IntelliJ IDEA 启动项目时配置端口指南
  • java 实现rtsp 直播流下载
  • Python高级编程实战:装饰器、迭代器与生成器的深度应用
  • 高级SQL技术综合指南(MySQL)
  • 【51单片机】【protues仿真】基于51单片机电子琴系统
  • 解决idea2021maven依赖导入后还是找不到包,爆红无法导入