反向迭代器的实现

简介: 反向迭代器的实现

       对于带有迭代器的容器,有正向迭代器,也有反向迭代器,而正向迭代器和反向迭代器比较相似,所以我们可以写一个反向迭代器的模板,给编译器,从传不同的容器的正向迭代器,实例化出对应的反向迭代器,也就是对正向迭代器进行封装,实现反向迭代器,



比如:

template<class Iterator,class Ref,class Ptr>
struct ReverseIterator
{
  typedef ReverseIterator<Iterator, Ref, Ptr> Self;
  Iterator _it;
  ReverseIterator(Iterator it)
    :_it(it)
  { }
  Ref operator*()
  {
    Iterator tmp = _it;
    return *(--tmp);//返回当前节点的上一个节点的值
  }
  Ptr operator->()
  {
    return &(operator*());
  }
 
  Self& operator++()
  {
    --_it;
    return *this;
  }
  Self& operator--()
  {
    ++_it;
    return *this;
  }
  bool operator!=(const Self& s)
  {
    return _it != s._it;
  }
 
};


//反向迭代器
typedef ReverseIterator<iterator, T&, T*> reverse_iterator;
typedef ReverseIterator<const_iterator, const T&, const T*> const_reverse_iterator;
 
reverse_iterator rbegin()
{
  return reverse_iterator(end());
}
reverse_iterator rend()
{
  return reverse_iterator(begin());
}

这是以list为例,实现的反向迭代器;



rbegin在end处,也就是哨兵位的地方,rend在begin处,这样写是为了和正向迭代器对称;


Ref operator*()
    {
        Iterator tmp = _it;
        return *(--tmp);//返回当前节点的上一个节点的值
    }


当我i们返回节点时,先 -- 解引用,这样得到的是前一个节点的值,这样就可以解决哨兵位没有有效值的问题了;这个过程是对正向迭代器进行封装实现反向迭代器!

相关文章
|
SQL 存储 Kubernetes
K8S搭建SQL server
K8S搭建SQL server
|
SQL Java 数据库连接
一篇文章彻底理解数据库的各种 JDBC 超时参数 1
一篇文章彻底理解数据库的各种 JDBC 超时参数
|
10月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
800 3
|
算法 数据挖掘 数据库
[软件工程导论(第六版)]第5章 总体设计(复习笔记)
[软件工程导论(第六版)]第5章 总体设计(复习笔记)
|
人工智能 自然语言处理 算法
自然语言处理
【11月更文挑战第18天】
895 4
|
监控 负载均衡 网络协议
OSPF在大型网络中的应用:高效路由与可扩展性
OSPF在大型网络中的应用:高效路由与可扩展性
1062 1
|
Oracle 安全 关系型数据库
Oracle数据恢复—Oracle数据库误删除的数据恢复方法探讨
删除Oracle数据库数据一般有以下2种方式:delete、drop或truncate。下面针对这2种删除oracle数据库数据的方式探讨一下oracle数据库数据恢复方法(不考虑全库备份和利用归档日志)。
|
存储 监控 搜索推荐
深度解析:装机设置全攻略,打造个性化高性能电脑
装机不仅仅是一个技术活,更是一个充满乐趣和创造性的过程。通过精心的硬件选择、兼容性的考虑、操作系统的安装与优化、个性化的设置以及性能测试与调优,你可以打造出一台符合自己使用习惯、性能出众的个性化电脑。同时,不要忽视备份与恢复策略的重要性,确保你的数据和系统安全无忧。希望本文能够为你提供有用的指导和启发,让你在装机的道路上更加得心应手。
540 1
|
缓存 监控 前端开发
Performance Optimization
Performance Optimization
3892 2
|
存储 缓存 算法
分页存储
分页存储
794 0