【C++】STL——list的使用

server/2025/2/7 12:09:15/

目录

💕1.带头双向链表List

💕2.list用法介绍

💕3.list的初始化 

💕4.size函数与resize函数

💕5.empty函数 

💕6.front函数与back函数 

💕7.push_front,push_back,pop_front,pop_back函数 

💕8.begin函数,end函数,rbegin函数,rend函数 

💕9.insert函数,erase函数 

💕10.swap函数 

💕11.clear函数

💕12.sort排序链表

💕13.remove函数

💕14.完结


独帜入渊深未知  身似浮萍命难持

(最新更新时间——2025.2.5)

💕1.带头双向链表List

在C++中,List是一种带头双向链表

 💦 list 容器的优点
 高效的插入和删除:由于std::list是基于带头双向循环链表实现的,插入和删除操作在任意位置都具有常数时间复杂度O(1),不需要移动其他元素。这使得std::list在需要频繁插入和删除元素的场景下非常高效。
稳定的迭代器:在std::list中进行插入和删除操作不会使得迭代器失效。这意味着在插入或删除元素后,仍然可以继续使用之前获取的迭代器进行遍历和操作。
动态内存管理:std::list可以动态调整大小,根据需要分配和释放内存。这使得std::list能够有效地处理大量元素的情况,而不会浪费过多的内存空间。


 💦 list 容器的缺点
低效的随机访问:由于std::list的存储结构是带头双向循环链表,访问元素时需要从头或尾开始遍历链表,因此在列表中进行随机访问的效率较低。获取特定位置的元素需要遍历链表,时间复杂度为O(n),其中n是元素的总数量。
占用额外内存:相较于其他容器,std::list在存储上需要额外的指针来维护链表结构,因此在存储大量元素时,它可能占用更多的内存空间。
迭代器不支持指针算术:std::list的迭代器不支持指针算术运算,无法像指针那样直接进行加减操作,这限制了一些操作的灵活性。

💕2.list用法介绍

 list的用法与vector是类似的,具体如下:

接下来进行逐一讲解使用->:

💕3.list的初始化 

list的初始化与vector一样,写法如下:

#include<iostream>
using namespace std;
#include<list>
int main()
{//初始化list<int> l1 = { 2,4,5 };list<double> l2 = { 4.5,5.5 };list<string> s1 = { "hello","world" };list<char> c1 = { 'x','p' };}

💕4.size函数与resize函数

 size函数可以返回链表的有效值个数

resize函数可以更改链表的有效值个数,并且“可以”进行初始化新开辟的size值

这些都与vector的使用是一样的,不懂的可以去看我的这篇文章

vector的使用详解


链表中没有capacity函数的使用,因为链表都是创建一个开辟一个,并不会一次开辟一堆空间


💕5.empty函数 

empty函数用来判断链表是否为空,返回值的类型是bool,如果为空返回true,否则返回false


💕6.front函数与back函数 

front函数用于返回链表的第一个有效元素

bakc函数用于返回链表的最后一个有效元素


这里简单直接展示代码了

💕7.push_front,push_back,pop_front,pop_back函数 

push_front用于链表的头插         push_back用于链表的尾插

pop_front用于链表的头删吗        pop_back用于链表的尾删


这里也简单,代码例题如下->:

💕8.begin函数,end函数,rbegin函数,rend函数 

这里的使用或者概念与顺序表完全相同,不做展示

文章跳转:vector的使用详解

💕9.insert函数,erase函数 

这里的使用或者概念与顺序表完全相同,不做展示

文章跳转:vector的使用详解

💕10.swap函数 

swap函数可以交换两个链表之间的内容

它底层的实现是通过交换头节点,因为头结点一交换后面的内容也等于交换了


代码示例->:

💕11.clear函数

clear函数用于将链表置为空链表


用法如下->:

💕12.sort排序链表

sort排序可以将链表排序为升序或者降序

代码如下->:

如果想排降序,那就加入greater函数

💕13.remove函数

功能描述:

remove 函数会遍历整个链表,将所有值等于 value 的元素从链表中移除,并释放这些元素所占用的内存。移除元素后,链表的长度会相应减少。


💕14.完结


http://www.ppmy.cn/server/165676.html

相关文章

Linux 内核模块 | 加载 / 添加 / 删除 / 优先级

注&#xff1a;本文为 “Linux 内核模块加载 / 添加 / 删除 / 优先级” 相关文章合辑。 机翻&#xff0c;未校。 未整理去重。 How Linux Kernel Boots? Linux 内核如何启动&#xff1f; Last Updated: 26 Apr, 2023 Many processes are running in the background when …

正态分布与柯西分布的线性组合与副本随机变量同分布

正态分布与柯西分布的线性组合与副本随机变量同分布 对于标准差为 σ \sigma σ&#xff0c;期望为0的正态分布&#xff0c;其概率密度函数为 f ( x ) 1 2 π σ exp ⁡ − x 2 2 σ 2 f(x) \frac{1}{\sqrt{2\pi}\sigma}\exp^{-\frac{x^2}{2\sigma^2}} f(x)2π ​σ1​exp−…

初学stm32 --- FreeRTOS移植

目录 移植前准备 1. 基础工程 2. FreeRTOS 源码 添加 FreeRTOS 文件 1. 添加 FreeRTOS 源码 2. 将文件添加到工程 3. 添加头文件路径 4. 添加 FreeRTOSConfig.h 文件 (1) FreeRTOSConfig.h 获取途径一 (2) FreeRTOSConfig.h 获取途径二 (3) FreeRTOSConfig.h 获取途径…

洛谷P2638 安全系统

安全系统 题目描述 特斯拉公司的六位密码被轻松破解后&#xff0c;引发了人们对电动车的安全性能的怀疑。李华听闻后&#xff0c;自己设计了一套密码&#xff1a; 假设安全系统中有 n n n 个储存区&#xff0c;每个储存区最多能存储存 2 2 2 种种类不同的信号&#xff08;…

【大数据技术】搭建完全分布式高可用大数据集群(ZooKeeper)

搭建完全分布式高可用大数据集群(ZooKeeper) apache-zookeeper-3.8.4-bin.tar.gz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群 ZooKeeper 的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/software目录下,软件…

ES6 变量解构赋值总结

1. 数组的解构赋值 1.1 基本用法 // 基本数组解构 const [a, b, c] [1, 2, 3]; console.log(a); // 1 console.log(b); // 2 console.log(c); // 3// 跳过某些值 const [x, , y] [1, 2, 3]; console.log(x); // 1 console.log(y); // 3// 解构剩余元素 const [first, ...re…

uniapp小程序自定义中间凸起样式底部tabbar

我自己写的自定义的tabbar效果图 废话少说咱们直接上代码&#xff0c;一步一步来 第一步&#xff1a; 找到根目录下的 pages.json 文件&#xff0c;在 tabBar 中把 custom 设置为 true&#xff0c;默认值是 false。list 中设置自定义的相关信息&#xff0c; pagePath&#x…

如何查看:Buildroot所使用Linux的版本号、gcc交叉编译工具所使用的Linux的版本号、开发板上运行的Linux系统的版本号

定义编号①②③的含义 将“Buildroot所使用Linux的版本号”编号为① 将“gcc交叉编译工具所使用的Linux的版本号”编号为② 将“开发板上运行的Linux系统的版本号”编号为③ 查看①和②的共同方法(通过sysroot查看) 由于此二者都有目录sysroot&#xff0c;而通过目录sysroot…