CPPlist初识

一.splice

std::list::splice

  • C++98
  • C++11

| entire list (1) | void splice (iterator position, list& x); |
| single element (2) | void splice (iterator position, list& x, iterator i); |

element range (3) void splice (iterator position, list& x, iterator first, iterator last);

作用:将链表转移,单个转移,部分转移到pos之前,并剪切链表的结点新增到调用的链表。

//这有效地将这些元素插入到容器中,并将它们从 x 中删除,从而更改了两个容器的大小。该操作不涉及任何元素的建造或破坏。无论 x 是左值还是右值,或者value_type是否支持移动构造,它们都会被转移。

规范:都要传迭代器,再list,定位用迭代器。

注意:自己转移:可以,把一个元素拿到另一个地方,可以结合std::find找某元素的迭代器。

二.杂项

模板实例化:只有在模板传入生成类/函数后才会详细检查语法错误

按需实例化:调用成员函数才会实例化那个成员函数

三.实现

list本质是带头双向链表

ListNode这样成员全部公有的一般用struct(不用写析构,由list同一调度)

迭代器封装Node*和++等操作(节点指针不符合迭代器++等行为)也是模板(各种Node*)

//全缺省必要传匿名对象

(1)遍历实现:

迭代器:vector迭代器可以用T*直接+到下一个位置,前提是空间连续

所以list迭代器要定义一个类重载部分运算符++,--,以找下一个位置

要重载的如:解引用,++,!=

可以用节点的指针构造

为了符合外部调用方式要typedef迭代器类型为iterator

不用析构资源,节点属于链表,(不是有成员是动态开辟的就要释放)

拷贝构造不用写(node*一样,指向同一节点)--->(一般一个类不写析构就不用自己写拷贝构造,默认的就够用)

重点:1.重载迭代器->

目的:取代迭代器的解引用再找成员

其实是两个箭头

cpp 复制代码
T* operator->()
{
return &_node->_data;//iterator里的Node*再找T*(迭代器的节点的数据的地址)
}

it->col;//其实是it->->col,简化语法
//it.operator->()->data

2.临时对象的常性

可以调用非静态的成员函数(包括非const),但不能给普通引用(编译器特殊处理)

3.const迭代器

普通迭代器前加const修饰的是迭代器本身,而不是指向的节点内部数据不能修改,const_iterator类似const P*,P能改,*P不能修改。

实现:让operator*,->访问的返回const类型

(不能让T变成const T,不然节点内部本身就变成了const,与list本身不同,迭代器传给list不能初始化等)

简化:const_iterator和iterator在外要手写两个类,可以让模板传const T和const T&,给const_iterator里*,->的返回值

4.insert和迭代器不会失效

因为list本身是个环,怎么扩容(增加单个节点不影响其他),迭代器不会指向无效位置

erase会失效,因为其指向节点的空间已经被释放

相关推荐
code bean5 小时前
【CMake 】[第十篇]CMake find_package 完全指南:让第三方库集成变得简单
c++·cmake
IT19955 小时前
C++使用“长度前缀法”解决TCP“粘包 / 拆包”问题
服务器·网络·c++·tcp/ip
Tipriest_5 小时前
旋转矩阵,齐次变换矩阵,欧拉角,四元数等相互转换的常用代码C++ Python
c++·python·矩阵
晨曦夜月5 小时前
笔试强训day5
数据结构·算法
H_z___5 小时前
Hz的计数问题总结
数据结构·算法
练习时长一年5 小时前
LeetCode热题100(搜索插入位置)
数据结构·算法·leetcode
hz_zhangrl5 小时前
CCF-GESP 等级考试 2025年9月认证C++六级真题解析
c++·算法·青少年编程·程序设计·gesp·2025年9月gesp·gesp c++六级
凌睿马5 小时前
关于复杂数据结构从MySQL迁移到PostgreSQL的可行性
数据结构·数据库·mysql
兵哥工控6 小时前
MFC用高精度计时器实现五段时序控制器
c++·mfc·高精度计时器·时序控制器
Fine姐6 小时前
数据结构03——树
数据结构