list的迭代器详讲

1.list的迭代器就是封装了节点指针的类

2.迭代器失效

迭代器失效即迭代器封装的节点指针无效 。因为 list 的底层结构为带头结点的双向循环链表 ,因此 list 中进行插入时是不会导致 list 的迭代 器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响

3.list的反向迭代器实现

cpp 复制代码
template<class Iterator>
class ReverseListIterator
{
 // 注意:此处typename的作用是明确告诉编译器,Ref是Iterator类中的类型,而不是静态成员变量
 // 否则编译器编译时就不知道Ref是Iterator中的类型还是静态成员变量
 // 因为静态成员变量也是按照 类名::静态成员变量名 的方式访问的
public:
 typedef typename Iterator::Ref Ref;
 typedef typename Iterator::Ptr Ptr;
 typedef ReverseListIterator<Iterator> Self;
public:
 //
 // 构造
 ReverseListIterator(Iterator it): _it(it){}
 //
 // 具有指针类似行为
 Ref operator*(){
     Iterator temp(_it);
     --temp;
     return *temp;
 }
 Ptr operator->(){ return &(operator*());}
 //
 // 迭代器支持移动
 Self& operator++(){

     --_it;
     return *this;
 }

Self operator++(int){
     Self temp(*this);
     --_it;
     return temp;
 }


Self& operator--(){
     ++_it;
     return *this;
 }

Self operator--(int)
 {
     Self temp(*this);
     ++_it;
     return temp;
 }
 //
 // 迭代器支持比较
 bool operator!=(const Self& l)const{ return _it != l._it;}
 bool operator==(const Self& l)const{ return _it != l._it;}
 Iterator _it;
};

反向迭代器和正向迭代器相比,只是++和--的方向变了,因此反向迭代器的实现思路是适配器,即:反向迭代器内部可以包含一个正向迭代器,对正向迭代器的接口进行包装即可。

相关推荐
罗湖老棍子2 分钟前
【例3-3】医院设置(信息学奥赛一本通- P1338)
数据结构·c++·算法·
历程里程碑12 分钟前
C++ 4:内存管理
java·c语言·开发语言·数据结构·c++·笔记·算法
LYFlied13 分钟前
【每日算法】LeetCode 76. 最小覆盖子串
数据结构·算法·leetcode·面试·职场和发展
小年糕是糕手18 分钟前
【C++】string类(一)
linux·开发语言·数据结构·c++·算法·leetcode·改行学it
绿算技术24 分钟前
在稀缺时代,定义“性价比”新标准
大数据·数据结构·科技·算法·硬件架构
zore_c29 分钟前
【C语言】贪吃蛇游戏超详解(包含音效、颜色、封装成应用等)
c语言·数据结构·笔记·stm32·游戏·链表
一起养小猫33 分钟前
《Java数据结构与算法》第四篇(二)二叉树的性质、定义与链式存储实现
java·数据结构·算法
晨晖210 小时前
单链表逆转,c语言
c语言·数据结构·算法
其美杰布-富贵-李12 小时前
HDF5文件学习笔记
数据结构·笔记·学习
明洞日记14 小时前
【数据结构手册008】STL容器完全参考指南
开发语言·数据结构·c++