STL——list

将数据进行链式存储

list 是一种物理存储单元上非连续 的存储结构 ,数据元素的逻辑顺序是通过链表中的指针链接实现的

是一种双向链表的容器,用于存储和管理元素的集合,

链表的组成:链表由一系列的结点组成

因为内存空间不是随机的,故list中的迭代器只支持前移和后移,属于双向迭代器

list的优点:

  • 采用动态内存分配,不会造成内存浪费和溢出

  • 执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素

    • 这个特点同时也导致了进行插入和删除操作不会导致list迭代器的失效(节点之间的链接关系并不依赖于内存块的连续性,因此在std::list中进行插入或删除不会导致迭代器的失效,可以继续用它们来遍历和访问列表中的元素。

缺点:

  • 链表灵活,但是空间和时间额外耗费比较大

  • 不支持随机访问(元素不是随机存储)

构造函数

  • list<T> lst; //list采用采用模板类实现,对象的默认构造形式:

  • list(beg,end); //构造函数将[beg, end)区间中的元素拷贝给本身。

  • list(n,elem); //构造函数将n个elem拷贝给本身。

  • list(const list &lst); //拷贝构造函数。

赋值与交换

  • assign(beg, end); //将[beg, end)区间中的数据拷贝赋值给本身。

  • assign(n, elem); //将n个elem拷贝赋值给本身。

  • list& operator=(const list &lst); //重载等号操作符

  • swap(lst); //将lst与本身的元素互换。

大小操作

  • size(); //返回容器中元素的个数

  • empty(); //判断容器是否为空

  • resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。

    //如果容器变短,则末尾超出容器长度的元素被删除。

  • resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。

    //如果容器变短,则末尾超出容器长度的元素被删除。

插入和删除

  • push_back(ele); //在容器尾部插入一个元素

  • pop_back();//删除容器最后一个元素

  • push_front(); //在容器开头插入一个元素

  • pop_front(); //在容器开头移除一个元素

  • insert(pos,ele); //在pos位置插ele元素的拷贝,返回数据的位置

  • insert(pos,n,ele);//在pos位置插入n个ele数据,无返回值

  • insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。

  • clear(); //移除容器中所有数据

  • erase(beg,end); //删除[beg,end)区间数据,返回下一个数据的位置

  • erase(pos);//删除pos位置的数据,返回下一个数据的位置。

  • remove(elem);//删除容器中所有与elem值匹配的元素。

数据存取

  • front(); //返回第一个元素

  • back(); //返回最后一个元素

注意,没有at或者下标因为不是连续存储

反转和排序

  • reverse(); //反转链表

  • sort(); //链表排序 已有数据类型默认排序规则比较按照**operator<**进行比较

    //若是自定义数据类型,可以在自定义数据类型中重载比较运算符

//或者提供自定义比较函数然后在sort()中传入这个函数

例如:

cpp 复制代码
bool ComparePerson(const Person& p1, const Person& p2) {
​
    if (p1.m_Age == p2.m_Age) {  
        return p1.m_Height  > p2.m_Height; //再按身高从大到小
    }
    else
    {
        return  p1.m_Age < p2.m_Age;  //先按年龄从小到大排序
    } 
​
}
相关推荐
§ꦿCFོ༉4 小时前
嵌入式八股文—C语言入门学习(四)
c语言·开发语言·学习
投图匠4 小时前
十种不同风格的 CTP接口 框架
开发语言·python
爱笑的k117 小时前
nano-vllm 源码剖析:千行 Python 手写离线推理引擎的调度、显存与并行时序
开发语言·python·vllm
X1A0RAN9 小时前
PPT 图片批量处理教程:导出全部幻灯片 · 提取全部素材
开发语言·javascript·powerpoint
熊猫钓鱼>_>10 小时前
普通用户视角的端侧智能体验手记【鸿蒙心迹】
开发语言·人工智能·华为·智能手机·性能优化·ai编程·harmonyos
瑞雪兆丰年兮10 小时前
JavaWeb-day13-SpringBootWeb事务管理&AOP
java·开发语言·springboot·javaweb·事务·web·aop
布莱克60512 小时前
Swift 常量详解:从 let 到编译期优化
服务器·开发语言·ssh·swift·常量·let
布莱克60512 小时前
Swift 可选类型(Optionals)详解:从原理到实战
开发语言·安全·ssh·swift·optional·可选类型
老歌老听老掉牙12 小时前
案例 7:二维 Rosenbrock 函数最小值(香蕉函数)
c++·pso
Severus_black13 小时前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl