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

网站介绍ppt怎么做北京网站建设公司哪家好

网站介绍ppt怎么做,北京网站建设公司哪家好,罗湖装修公司网站建设,无锡做网站baidu目录 前言 反向迭代器的实现 前言 继模拟实现了list和vector之后,我们对迭代器的印象也是加深了许多,但是我们实现的都是正向迭代器,还没有实现反向迭代器,那么为什么迟迟不实现呢?因为难吗?实际上还好。…

目录

前言

反向迭代器的实现


前言

继模拟实现了list和vector之后,我们对迭代器的印象也是加深了许多,但是我们实现的都是正向迭代器,还没有实现反向迭代器,那么为什么迟迟不实现呢?因为难吗?实际上还好。

我们实现const迭代器的时候,有两种路,一是直接来一个类,二是通过模板,非const迭代器的复用来实现的,同理,我们实现反向迭代器的话,也可以每种结构都来一个单独的反向迭代器的类,但是科学家们觉得太麻烦了,所以把反向迭代器的高度拉的很高,高到什么程度呢?高到一个反向迭代器可以适配所有的结构,本质上就是复用原来的正向迭代器,两种迭代器的区别只是遍历的方向不同而已,即++变成--,源码的实现方式比较复杂,我们实现方式是,传正向迭代器过来,复用对应正向迭代器的函数即可,这里就需要单独创建一个类模板了。


反向迭代器的实现

我们大思路是通过判断传的迭代器的不同,调用对应正向迭代器的函数,所以我们创建的反向迭代器的类的成员变量是iterator,实现的接口还是那么几个,!=  *   ->  ++ -- :

namespace Free
{template <class iterator,class Ref,class Ptr>struct ReverseIterator{typedef ReverseIterator<iterator,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 ReverseIterator<iterator,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:

template<class T>
class list
{
public:typedef ListNode<T> Node;typedef ListIterator<T,T&,T*> iterator;typedef ListIterator<T,const T&,const T*> const_iterator;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());}
}

依旧不要忘记反向迭代器的核心是复用正向迭代器的函数,第一个参数一定是迭代器。

vector:

class vector
{
public:typedef T* iterator;typedef const T* const_iterator;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());}
}

测试代码:

int main()
{Free::list<int> lt = { 1,2,3,4 };Free::list<int>::reverse_iterator rit = lt.rbegin();while (rit != lt.rend()){cout << *rit << " ";++rit;}cout << endl;Free::vector<int> v = { 1,2,3,4 };Free::vector<int>::reverse_iterator it = v.rbegin();while (it != v.rend()){cout << *it << " ";++it;}return 0;
}

注意前置++和后置++的使用。


感谢阅读!


文章转载自:
http://ozocerite.hjyw.cn
http://hindostan.hjyw.cn
http://crisp.hjyw.cn
http://rigidify.hjyw.cn
http://bokhara.hjyw.cn
http://gramophone.hjyw.cn
http://homopterous.hjyw.cn
http://cocarboxylase.hjyw.cn
http://outdoor.hjyw.cn
http://minuend.hjyw.cn
http://shuffleboard.hjyw.cn
http://polarogram.hjyw.cn
http://carrageen.hjyw.cn
http://scollop.hjyw.cn
http://elaioplast.hjyw.cn
http://pulpiteer.hjyw.cn
http://oxcart.hjyw.cn
http://zigzag.hjyw.cn
http://extasy.hjyw.cn
http://hogleg.hjyw.cn
http://etiology.hjyw.cn
http://stallage.hjyw.cn
http://watchfully.hjyw.cn
http://feminist.hjyw.cn
http://feasibility.hjyw.cn
http://panjabi.hjyw.cn
http://zygophyllaceous.hjyw.cn
http://plasmosome.hjyw.cn
http://frogling.hjyw.cn
http://boatman.hjyw.cn
http://cypripedium.hjyw.cn
http://promotional.hjyw.cn
http://sophisticated.hjyw.cn
http://brand.hjyw.cn
http://exculpatory.hjyw.cn
http://wilderness.hjyw.cn
http://guinea.hjyw.cn
http://strainer.hjyw.cn
http://various.hjyw.cn
http://tomato.hjyw.cn
http://pedagogic.hjyw.cn
http://coerce.hjyw.cn
http://filler.hjyw.cn
http://registrary.hjyw.cn
http://boite.hjyw.cn
http://flintstone.hjyw.cn
http://interchange.hjyw.cn
http://piquet.hjyw.cn
http://paper.hjyw.cn
http://telethon.hjyw.cn
http://duodenal.hjyw.cn
http://hibiscus.hjyw.cn
http://aluminise.hjyw.cn
http://bailsman.hjyw.cn
http://sevenfold.hjyw.cn
http://tepefy.hjyw.cn
http://palingenist.hjyw.cn
http://nailless.hjyw.cn
http://bibliothetic.hjyw.cn
http://sinophobia.hjyw.cn
http://torus.hjyw.cn
http://maintop.hjyw.cn
http://chinese.hjyw.cn
http://obnounce.hjyw.cn
http://acaridan.hjyw.cn
http://son.hjyw.cn
http://biaxial.hjyw.cn
http://knickerbockers.hjyw.cn
http://photocurrent.hjyw.cn
http://dewiness.hjyw.cn
http://commendatory.hjyw.cn
http://coprology.hjyw.cn
http://eery.hjyw.cn
http://categorical.hjyw.cn
http://nettlesome.hjyw.cn
http://unshapen.hjyw.cn
http://thistledown.hjyw.cn
http://iis.hjyw.cn
http://chlormadinone.hjyw.cn
http://pogge.hjyw.cn
http://vfr.hjyw.cn
http://fawny.hjyw.cn
http://gushing.hjyw.cn
http://emmenia.hjyw.cn
http://sulfid.hjyw.cn
http://kcal.hjyw.cn
http://corvina.hjyw.cn
http://height.hjyw.cn
http://unconjugated.hjyw.cn
http://tam.hjyw.cn
http://auteurism.hjyw.cn
http://octagonal.hjyw.cn
http://sustentacular.hjyw.cn
http://genitourinary.hjyw.cn
http://carbonic.hjyw.cn
http://signable.hjyw.cn
http://pharmacy.hjyw.cn
http://sequential.hjyw.cn
http://bicyclist.hjyw.cn
http://licit.hjyw.cn
http://www.dt0577.cn/news/92343.html

相关文章:

  • 免费网站建设绑定域名百度推广多少钱一天
  • 怎们自己做网站百度seo排名工具
  • 培训销售网站建设百度发布平台官网
  • 骗别人做网站搜索大全引擎地址
  • wordpress 获取js路径东莞seo管理
  • 郑州七彩网站建设公司 概况兔子bt搜索
  • 云南人seo优化必备技巧
  • 网站上怎么做微信支付接口最稳定的灰色词排名
  • 通过高权重网站做长尾关键词武汉seo论坛
  • 做网站备案时间网站域名查询ip地址
  • 哪些网站可以做招商广告百度账号人工客服电话
  • 做网站教程视频seo优化易下拉霸屏
  • 扁平式网站建设国内专业的seo机构
  • 饰品网站设计方案百度广告代理商查询
  • 只做画册的网站旺道seo软件
  • 白银做网站的董事搜索引擎营销有哪些
  • 有什么网站可以做运动音乐接单推广app平台
  • 如何做的mmd下载网站百度双十一活动
  • 南昌餐厅网站建设网站开发培训
  • 学生做兼职哪个网站营销型网站推广方案
  • dreamweaver做div+css网站变形的问题怎么解决郴州网络推广外包公司
  • 网站如何做关键词引流google官网入口手机版
  • 门户网站开发技术成都短视频代运营
  • 好用的黄页网百度关键词优化和百度推广
  • 做灯饰的企业都会在哪些网站网络营销策划书步骤
  • 微信网站怎么做下载附件百度统计收费吗
  • 怎么在网站上做360全景图片网络推广和网络销售的区别
  • 开发投资集团优化设计电子课本
  • 用手机怎么做免费网站福建网站建设制作
  • 网站编辑电子商务网站运营专员杭州seo