反向迭代器的实现

简介: 反向迭代器的实现

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



比如:

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

目录
打赏
0
0
1
0
20
分享
相关文章
CSS实现禁用状态,样式设置以及不可点击事件的行为
CSS实现禁用状态,样式设置以及不可点击事件的行为
3600 0
EasyCode 自动生成代码
【10月更文挑战第16天】总的来说,EasyCode 自动生成代码是一款非常有价值的工具。它为开发者们带来了便捷、高效和创新,让软件开发变得更加轻松和有趣。随着技术的不断进步,相信 EasyCode 还会不断完善和发展,为开发者们提供更多更好的服务。
150 1
WK
|
10月前
|
Beautiful Soup有哪些优点和缺点
Beautiful Soup 是一款用于解析 HTML 和 XML 的 Python 库,在网页爬虫和数据提取领域广泛应用。它以简单易用、容错性强、灵活性高及功能丰富著称,支持多种解析器并能处理不规范文档。然而,其解析速度较慢、对不规范 HTML 支持有限、XPath 查询能力弱、处理非 ASCII 字符集能力不足且不支持动态页面解析。开发者需根据具体需求选择合适工具以优化效果。
WK
255 1
实时数仓 Hologres操作报错合集之执行Flink的sink操作时出现报错,是什么原因
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
11月前
【2023 华数杯全国大学生数学建模竞赛】 A题 隔热材料的结构优化控制研究 问题分析及完整论文
本文提供了2023年华数杯全国大学生数学建模竞赛A题的完整论文,深入分析了隔热材料的结构优化控制研究,包括建立数学模型、求解单根纤维的热导率、优化织物结构参数以及考虑对流换热影响的模型调整,旨在开发出具有更优隔热性能的新型织物。
187 0
【2023 华数杯全国大学生数学建模竞赛】 A题 隔热材料的结构优化控制研究 问题分析及完整论文
channelSftp.put(InputStream src, String dst, int mode);里的mode都是什么类型的
【5月更文挑战第15天】channelSftp.put(InputStream src, String dst, int mode);里的mode都是什么类型的
451 2
人类标注的时代已经结束?DeepMind 开源 SAFE 根治大模型幻觉问题
Google DeepMind和斯坦福大学的研究人员发布了《衡量大型语言模型长篇事实性》论文,提出了新数据集LongFact(含2,280个问题)和评估方法SAFE,用于检查AI模型在生成长文时的事实准确性、连贯性和详尽性。
基于SpringBoot的中医诊疗平台的设计与实现(二)
基于SpringBoot的中医诊疗平台的设计与实现
144 1

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问