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;  //先按年龄从小到大排序
    } 
​
}
相关推荐
charlie1145141915 分钟前
C++ STL CookBook
开发语言·c++·stl·c++20
袁袁袁袁满5 分钟前
100天精通Python(爬虫篇)——第113天:‌爬虫基础模块之urllib详细教程大全
开发语言·爬虫·python·网络爬虫·爬虫实战·urllib·urllib模块教程
ELI_He99912 分钟前
PHP中替换某个包或某个类
开发语言·php
小林熬夜学编程16 分钟前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
m0_7482361119 分钟前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust
倔强的石头10627 分钟前
【C++指南】类和对象(九):内部类
开发语言·c++
Watermelo61732 分钟前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
A懿轩A2 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
机器视觉知识推荐、就业指导2 小时前
C++设计模式:享元模式 (附文字处理系统中的字符对象案例)
c++
半盏茶香2 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法