当前位置: 首页 > news >正文

自己做一元夺宝网站多媒体设计制作公司北京

自己做一元夺宝网站,多媒体设计制作公司北京,深圳非凡网站建设公司,上海发布微信公众号目录 前言 反向迭代器的实现 前言 继模拟实现了list和vector之后#xff0c;我们对迭代器的印象也是加深了许多#xff0c;但是我们实现的都是正向迭代器#xff0c;还没有实现反向迭代器#xff0c;那么为什么迟迟不实现呢#xff1f;因为难吗#xff1f;实际上还好。…目录 前言 反向迭代器的实现 前言 继模拟实现了list和vector之后我们对迭代器的印象也是加深了许多但是我们实现的都是正向迭代器还没有实现反向迭代器那么为什么迟迟不实现呢因为难吗实际上还好。 我们实现const迭代器的时候有两种路一是直接来一个类二是通过模板非const迭代器的复用来实现的同理我们实现反向迭代器的话也可以每种结构都来一个单独的反向迭代器的类但是科学家们觉得太麻烦了所以把反向迭代器的高度拉的很高高到什么程度呢高到一个反向迭代器可以适配所有的结构本质上就是复用原来的正向迭代器两种迭代器的区别只是遍历的方向不同而已即变成--源码的实现方式比较复杂我们实现方式是传正向迭代器过来复用对应正向迭代器的函数即可这里就需要单独创建一个类模板了。 反向迭代器的实现 我们大思路是通过判断传的迭代器的不同调用对应正向迭代器的函数所以我们创建的反向迭代器的类的成员变量是iterator实现的接口还是那么几个!  *   -  -- namespace Free {template class iterator,class Ref,class Ptrstruct ReverseIterator{typedef ReverseIteratoriterator,Ref, Ptr self;ReverseIterator(iterator it):_it(it){}iterator _it;}; } 迭代器其实有个共同的特点就是一般使用struct因为里面的变量函数什么的都是要访问的使用class就麻烦了一点点。 第一个参数是迭代器也就是判断复用谁的迭代器第二个参数是引用第三个参数是指针类型。 这里需要引入一个问题 这是我们没真正接触反向迭代器之前所猜想的反向迭代器结构。 但是源码的操作不是的计算机科学家们可能有点强迫症希望对称。 这是链表中的反向迭代器顺序表同理主打的就是一个对称。 那么这时候的访问就成了问题此时源码的神之一手出现了比如链表rbegin第一次访问的结果应该是5那么我们就来一个临时变量之后(实际上是--)访问到5即可这里是不可以迭代器-1或者迭代器--的因为迭代器本身我们不能破坏但是临时变量却可以随意捣鼓。 template class iterator,class Ref,class Ptr struct ReverseIterator {typedef ReverseIteratoriterator,Ref, Ptr self;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;}iterator _it; }; 这样的一个反向迭代器就算是完成了。 list vector中反向迭代器的应用 注意这里实现的反向迭代器是个简单版本只适用于list和vector。 使用的话加几个typedef 来几个reverse_iterator函数就没问题了比如list templateclass T class list { public:typedef ListNodeT Node;typedef ListIteratorT,T,T* iterator;typedef ListIteratorT,const T,const T* const_iterator;typedef ReverseIteratoriterator,T,T* reverse_iterator;typedef ReverseIteratorconst_iterator,const T,const T* const_reverse_iterator;reverse_iterator rbegin(){return reverse_iterator(end());}reverse_iterator rend(){return reverse_iterator(begin());} } 依旧不要忘记反向迭代器的核心是复用正向迭代器的函数第一个参数一定是迭代器。 vector: class vector { public:typedef T* iterator;typedef const T* const_iterator;typedef ReverseIteratoriterator, T, T* reverse_iterator;typedef ReverseIteratorconst_iterator, const T, const T* const_reverse_iterator;reverse_iterator rbegin(){return reverse_iterator(end());}reverse_iterator rend(){return reverse_iterator(begin());} } 测试代码 int main() {Free::listint lt { 1,2,3,4 };Free::listint::reverse_iterator rit lt.rbegin();while (rit ! lt.rend()){cout *rit ;rit;}cout endl;Free::vectorint v { 1,2,3,4 };Free::vectorint::reverse_iterator it v.rbegin();while (it ! v.rend()){cout *it ;it;}return 0; } 注意前置和后置的使用。 感谢阅读
http://www.ho-use.cn/article/10814193.html

相关文章:

  • 深圳做针织衫服装的网站网站如何做cc防护
  • 做网站的书中国最新军事消息
  • 重庆建设网站公司哪家好wordpress如何修改不用邮箱注册
  • 大学生健康咨询网站建设方案网站推广介绍
  • 丽水网站开发wordpress釆集插件
  • 中国建设银行官网站预定红念币完成网站建设的心得体会
  • 网站建设投标书范本深圳市政工程招标网
  • 海市科技网站建设用凡科可以做视频网站吗
  • 网站短期电脑培训班学费类似wordpress的程序
  • 学生管理系统网站word和wordpress
  • 网站建设和网站运营包括什么内蒙营销型网站建设
  • 网站制作费用大概多少博兴县城乡建设局网站
  • 外贸大型门户网站制作建设网站需要什么软件
  • 网站建设方案应急处置贵州建设监理网站
  • wordpress制作小说网站模板常见的互联网应用
  • 网站制作公司美股上市wordpress 关键词设置
  • 学做网站记不住代码做印刷网站公司简介
  • 网站权重不够高 导致易语言的网站开发系统
  • 如何做各大网站广告链接免费网站建设服务
  • 已备案网站更换域名wordpress 个人说明
  • 织梦欧美网站模板网站开发如何进行管理
  • 网站管理员后台网站中转页
  • 建博客网站动漫设计与制作零基础教程
  • 做网站的品牌公司ps做网站首页效果特效
  • 用html制作购物网站钦州网站建设公司
  • 企业网站需要哪些模块这样建立网站
  • 东莞网站运营知名乐云seo上海建站
  • 济南网站建设推广服务网站开发销售提成
  • 广州网站优化多少钱flash如何做网站
  • 网站后台导入excel表格如何实现输入域名访问网站首页