C++ STL : list

C++ STL 标准库 std::list总结 C++ STL 标准库 std::list总结简介成员函数 简介 list 好处是常数空间插入和删除元素,但不支持快速随机访问, 通过双向链表实现. 定义在头文件<list> 中, 属于容器. template< class T, class Allocator = std::allocator<T> > class list; 成员函数 这里有详细的参考 有一点需要注意, 在执行pop_front pop_back 等成员函数时, 需要先判断链表是否为 阅读详情

好! 不太想写CCF的题,那就再开一个吧

来 ! list,有了前面vector的基础,看list也轻松了很多,看来链表也是不是很难嘛

list优点就是插入删除方便,但是不能随机访问,因为不是连续的空间

1 基本数据结构

说到list,首先要看节点的数据结构

```C++
struct _List_node//双向链表, 源码没太看懂,书上是
{
  pre;
  next;
  T data;
//
```

typedef _List_node<_Tp> _Node;

list中只有一个节点指针node,指向尾端的空白节点(超尾),最重要的是list居然是环状的!! ! 这样一个指针就可以解决所有的了,有趣

begin() -> node->next

end() -> node

empty() node == node->next

front() *(node->next)

back() *(–node)

2 迭代器

vector是连续空间,所以普通指针就可以了,但是list就复杂了一点,vector没有定义指针,就是value_type*类型的

list重新写了一个迭代器的class

```C++
  template<typename _Tp>
struct _List_iterator
{
  typedef _List_iterator<_Tp>		_Self;
  typedef _List_node<_Tp>			_Node;

  typedef ptrdiff_t				difference_type;
  typedef std::bidirectional_iterator_tag	iterator_category;//双向迭代器
  typedef _Tp				value_type;
  typedef _Tp*				pointer;
  typedef _Tp&				reference;

__detail::_List_node_base* _M_node;//指向list节点的指针

//下面还重载了一些操作符 *(这个oprd好像我们自己是不能重载的,STL居然写了重载)== != -> ++ -- -- ++
```

list有个特性就是做任何操作,插入、删除,迭代器都不会失效,除了删除哪一个节点

3 基本操作

push_back()

调用insert(end(), x); 就是基本的链表操作

pop_back() pop_front()

tmp = end(); erase(–tmp);

clear()

循环destroy_node();

remove(value)

找到erase();

unique()

连续删除相同的,只保留一个

transfer(pos, first, last)

把[first,last)迁移到pos处,vector可能会麻烦些,但是list就很简单,只要把区间的两头连上就ok了,我就不写了

然后splic()、sort()、merge()都是基于transfer的

回宿舍再写吧


下面这些都是将x另一个链表接到本链表上

splice()

splice(pos, x); 调用transfer(pos, x.begin(), x.end());其他版本的我就不写了

merge()

merge是合并两个有序链表

reverse()

是不断把begin()后面那个用transfer()调到前面去

sort()

算法中的sort()要求随机访问迭代器,所以list不能使用sort,得写自己的sort

采用快排, 还没太看懂

ArcGIS笔记2_如何将经纬度WGS84地理坐标系转换为米单位CGCS2000投影坐标系 本博文则主要讲解,如果我们手里拿到的shp文件是在ArcGIS中,如何将经纬度WGS84地理坐标系转换为米单位CGCS2000投影坐标系。 阅读详情

相关推荐

基于docker进行安装部署seata,解决Seata的版本与Nacos的版本不匹配

本文分享了在Docker环境下部署Seata时遇到Nacos 3.x API不兼容问题的解决方案。由于Seata 2.0.0内置的nacos-client 1.4.2无法调用Nacos 3.x重构后的接口,导致注册失败。通过下载Seata 2.6.0源码自行构建Docker镜像,并调整启动方式(直接执行Java命令绕过Shell脚本),最终成功实现与Nacos 3.x的集成。关键步骤包括:创建自定义Dockerfile、配置application.yml、处理启动脚本兼容性问题,最终采用java直接运行方案

Dd52698的博客 407

第十次ccf 学生排队

题目: 试题编号: 201703-2 试题名称: 学生排队 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   体育老师小明要将自己班上的学生按顺序排队。他首先让学生按学号从小到大的顺序排成一排,学号小的排在前面,然后进行多次调整。一次调整小明可能让一位同学出队,向

xiaoli_nu的博客 2207

从流体力学到深度学习:手把手教你用PINN预测涡流场(基于TensorFlow2.10+GPU)

本文详细介绍了如何利用物理信息神经网络(PINN)结合TensorFlow 2.10和GPU加速,预测Navier-Stokes方程的涡流场。通过核心原理讲解、实战环境配置、网络架构设计及物理约束实现,帮助读者掌握从流体力学到深度学习的跨学科技术应用,特别适合处理复杂流体问题和非定常流动场景。

weixin_29048309的博客 212

PTA 7-3 办事大厅排队 (20分) c++ stl list

在郑州大学综合办事大厅,每天陆陆续续有很多人来排队办事。现在你能否写程序帮助老师时刻了解当前办理业务的情况。 请同学们学习C++ STL中 list相关内容后,编程实践。 输入格式: 第一行一个数字N,表示排队信息或者查询信息条目的数量。 以下N行,每行的内容有以下3种情况 (1) in name 表示名字为name的人员新来到办事大厅,排在队伍的最后。(in和name间存在一个空格,name是名字对应字符串,长度不超过10)。 (2) out 表示当前排在最前面的人已经办理完业务,离开了。 (3) q 表

qq_40468936的博客 7218

西工大noj100题python2024第三季21-30

【代码】西工大noj100题python2024第三季21-30。

weixin_70523540的博客 1578

研一脑电小白日记 之 EEGLAB预处理实战指南

本文为脑电研究新手提供了一份详尽的EEGLAB预处理实战指南。从MATLAB与EEGLAB环境搭建、使用NeuracleEEGFileReader插件导入BDF格式数据开始,逐步讲解了电极定位、滤波、降采样、ICA去伪迹等核心步骤,旨在帮助初学者高效完成脑电数据预处理,为后续分析奠定坚实基础。

weixin_29230649的博客 557

第二次CCF计算机软件能力认证 第三题 STL 字符串处理

第二次CCF计算机软件能力认证 第三题 STL 字符串处理 #include<iostream> using namespace std; #include<algorithm> #include<string> #include<cstring> #include<cctype> string aa; string ans[105]; string ans_new[105]; int ok; int n; int main() {

weixin_45448563的博客 167

乐鑫ESP32-C6产测全流程:RAM固件测试与阈值校准实战指南

Wi-Fi模组量产测试是保障IoT设备射频性能与硬件可靠性的关键环节,其核心在于基于RAM的无损固件加载、可配置的阈值判定机制及多工位协同控制。该流程依托串口协议与结构化配置(如JSON阈值文件、.bin测试固件),实现RF性能(fb_rssi、tx_power)、GPIO导通性、Flash ID识别与固件版本校验等原子化测试项的自动化执行。技术价值体现在避免Flash擦写风险、支持动态温补与在线学习校准,并无缝对接MES系统实现质量数据闭环。典型应用场景包括ESP32-C6/C3/S2等乐鑫全系Wi-Fi

weixin_35756690的博客 311

STL 简介,标准模板库(zt)

STL 简介,标准模板库[ZT] 作者:Scott Field这篇文章是关于C++语言的一个新的扩展--标准模板库的(Standard Template Library),也叫STL。 当我第一次打算写一篇关于STL的文章的时候,我不得不承认我当时低估了这个话题的深度和广度。有很多内容要含盖,也有很多详细描述STL的书。因此我重新考虑了一下我原来的想法。我为什么要写这篇文章,又为什么要投稿呢?

1808

SAP 财务快速记账之--科目分配模型(Account assignment model )

SAP FICO 运维解决方案

lijinbao171022的博客 1768

【unity知识】最新的虚拟相机Cinemachine3简单使用介绍

本文介绍了Unity中Cinemachine 3虚拟相机系统的使用方法。相比旧版本,新版功能更强大且参数分类更直观。文章详细讲解了摄像机镜头参数、旋转控制(包括None、目标跟随、样条线推拉、旋转追随等6种模式)和位置控制(跟随、样条轨道、硬锁定等5种模式)。重点演示了样条轨道摄像机的创建与配置,以及如何实现第一人称和第三人称视角。通过丰富的GIF图示,展示了各种模式的运行效果,帮助用户快速掌握Cinemachine 3的核心功能。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 866

C++ string的用法和例子

使用场合: string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行操作,也可以通过文件等手段进行操作。同时C++的算法库对string也有着很好的支持,而且string还和c语言的字符串之间有着良好的接口。虽然也有一些弊端,但是瑕不掩瑜。 其中使用的代码多数都是来自cpp官网,因为例子非常全。 声明和初始化方法: 想使用string首先要在头文件...

@fei 19万+

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)

详细步骤1 数据集的制作1.1 数据标注1.2 生成数据集2 环境的搭建2.1 搭建流程2.2 注意事项(报错)3 开始训练4 可视化4.1 修改webcam.py文件4.2 进行可视化5 参考文章 1 数据集的制作 1.1 数据标注 使用 labelme=4.5.6 版本进行标注,标注文件指定到保存图片的路径下,也就是json文件和jpg文件放在同一个文件夹里 1.2 生成数据集 先手动划分训练集和测试集(包括图像和标注文件),然后分别整合它们的标注信息,参考代码:1_ships_to_coco.py

G果的博客 8002

深入理解C++ stl::list 底层实现+模拟实现

stl:: list 是 双向带头循环链表,对数据的插入和删除具有高效率。

2301_81978155的博客 2995

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深入剖析 C++ STL 中的 std::list 容器

STL list 详解

威桑的博客 1405

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++ : STL容器之list剖析

摘要: 本文深入剖析了STL中list容器的关键接口与实现原理。首先对比了push_back与emplace_back的差异,指出emplace_back在直接构造场景下的性能优势。其次分析了list单独实现sort函数的原因,源于其只支持双向迭代器而非随机迭代器。文章还详细讲解了splice、unique和merge等独特接口的用法。最后探讨了list的模拟实现,包括结点类设计、迭代器封装与模板参数优化技巧,特别解释了->运算符重载的特殊处理方式。通过代码示例与图示,全面展示了list容器的内部机制

2301_81454749的博客 2404

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[C++ STL] list::swap()

list::swap() 交换两个容器中的元素,前提是元素类型相同: #include <iostream> #include <list> int main() { // list container declaration std::list<int> mylist1{1, 2, 3, 4, 5, 6}; std::list<...

K.Sun 4278

[C++ STL] list::merge()

#include<iostream> #include<list> int main(){ // declaring the lists // initially sorted, use sort() if unsorted std::list<int> list1 = { 10, 20, 30 }; std::list<...

K.Sun 1438

【C++ STL】std::list

std::list容器介绍

AmiaYukiAchami的博客 293

C++ STL源码剖析 4-std::list

在C++标准模板库(STL)中,std::list是一个双向链表的容器。它允许在序列的任何位置高效地插入和删除元素。std::list提供了链表的灵活性和动态大小的特性,同时支持快速的插入和删除操作。以下是std::list模板类std::list是一个模板类,可以存储任何数据类型。双向链表:内部使用双向链表实现,每个元素都有一个前驱指针和一个后继指针。内存分配:动态分配内存以存储元素,可以在运行时动态增加和减少大小。迭代器:提供双向迭代器,支持正向和反向遍历。无随机访问:不支持像。

wesigj的博客 1208

【C++11】{}初始化、std::initializer_list、decltype、STL新增容器

十年磨一剑——C++11

m0_70980326的博客 1609

【C++】详解STL的容器之一:list

本篇的内容有:list简单的介绍,形象化的模型,优缺点,源码思路,模拟实现。希望本篇内容能帮助读者更好的认识list

2301_79796701的博客 2173

转换为list_C++ STL std::list部分实现

写在前面(本文是个人笔记,有胡言乱语和少数错漏部分)这篇笔记图解了STL中std::list的实现,并结合代码分析了其迭代器,结点定义,部分成员函数的实现。最后,仿造std::list的代码,在Leetcode 146. LRU缓存机制中实现了list的部分功能。总结list的几个要点:list仅持有一个指针p(即 _M_node),指向哨兵节点。p作为end()的返回值。p->next是头...

weixin_39531761的博客 550

C++ STL : std::list

练习下C++ STL中std::list类的常用方法,方便以后查阅。 如有不正确的地方,请读者及时指正,欢迎转载,谢谢! #include #include //1) 容器通常都是类模板,在使用时需要传递模板参数来实例化容器类型。 //2) 容器内的所有元素都是拷贝,当需要存储自定义类或结构体的时候,容器内通常保存对象的指针。 //3) 可通过容器元素的指针,引用或迭代器来修改容器元素。

zxh2075的专栏 645

【C++ | STL】std::list<T> 详细介绍以及例子代码(很全很详细)

本文详细介绍了C++标准库的 std::list,以及代码例子。

wkd_007的博客 1193

C++STL详解1:list

本文详细介绍了C++标准库中的list容器,主要包括以下内容: list的本质是带头双向链表,属于顺序表的一种链式实现 list迭代器属于双向迭代器,与vector的随机访问迭代器不同,不支持+=等操作 重点分析了emplace_back接口,它支持可变参数模板和隐式类型转换 分类整理了list的各种接口,特别讲解了splice接口的剪切功能 探讨了list排序的效率问题,建议先拷贝到vector排序再转回 深入剖析了list的底层实现,包括节点类、迭代器类和list本体的设计思路 详细讲解了如何通过模板参

JYY97409的博客 931
上一篇: C++复习
下一篇: ML: 百面机器学习
fff_421
博客等级 码龄7年 3粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值