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;
};

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

相关推荐
User_芊芊君子1 天前
【Java ArrayList】底层方法的自我实现
java·开发语言·数据结构
敲代码的嘎仔1 天前
牛客算法基础noob56 BFS
java·开发语言·数据结构·程序人生·算法·宽度优先
今后1231 天前
【数据结构】堆、计数、桶、基数排序的实现
数据结构·算法·堆排序·计数排序·桶排序·基数排序
敲代码的嘎仔1 天前
牛客算法基础noob59 简写单词
java·开发语言·数据结构·程序人生·算法·leetcode·学习方法
白水先森1 天前
C语言作用域与数组详解
java·数据结构·算法
想唱rap2 天前
直接选择排序、堆排序、冒泡排序
c语言·数据结构·笔记·算法·新浪微博
YuTaoShao2 天前
【LeetCode 每日一题】2221. 数组的三角和
数据结构·算法·leetcode
MoRanzhi12032 天前
2. Pandas 核心数据结构:Series 与 DataFrame
大数据·数据结构·人工智能·python·数据挖掘·数据分析·pandas
Excuse_lighttime2 天前
除自身以外数组的乘积
java·数据结构·算法·leetcode·eclipse·动态规划
万添裁2 天前
归并排序的三重境界
数据结构·算法