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

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

相关推荐
Sarvartha1 小时前
N 个字符串最长公共子序列(LCS)求解问题
数据结构·算法
m0_629494731 小时前
LeetCode 热题 100-----16.除了自身以外数组的乘积
数据结构·算法·leetcode
迷途之人不知返1 小时前
优先级队列:priority_queue
数据结构·c++
jieyucx1 小时前
Go 零基础数据结构:顺序表(像「排抽屉」一样学增删改查)
java·数据结构·golang
想唱rap1 小时前
应用层协议与序列化
linux·运维·服务器·网络·数据结构·c++·算法
jinyishu_2 小时前
链表经典OJ题
c语言·数据结构·算法·链表
澈2072 小时前
C++引用与指针:核心区别全解析
开发语言·数据结构·c++
迷途之人不知返3 小时前
deque的简单认识
数据结构·c++
上弦月-编程3 小时前
指针编程:高效内存管理核心
java·数据结构·算法
xieliyu.3 小时前
Java手搓数据结构:栈与队列模拟实现
java·数据结构·学习