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

合肥网站建设方案国际新闻最新消息十条摘抄2022

合肥网站建设方案,国际新闻最新消息十条摘抄2022,wordpress主页不显示,北京广告设计公司排名朋友们、伙计们#xff0c;我们又见面了#xff0c;本期来给大家解读一下有关反向迭代器的模拟实现#xff0c;如果看完之后对你有一定的启发#xff0c;那么请留下你的三连#xff0c;祝大家心想事成#xff01; C 语 言 专 栏#xff1a;C语言#xff1a;从入门到精通… 朋友们、伙计们我们又见面了本期来给大家解读一下有关反向迭代器的模拟实现如果看完之后对你有一定的启发那么请留下你的三连祝大家心想事成 C 语 言 专 栏C语言从入门到精通 数据结构专栏数据结构 个  人  主  页 stackY、 C 专 栏   C Linux 专 栏  Linux ​ 目录 前言 1. 基本构造 2. 接口完善 3. 在list中使用反向迭代器 list反向迭代器版本一 list反向迭代器版本二  4. 在vector中使用反向迭代器  前言 前面的模拟实现vector和list中是没有实现反向迭代器的反向迭代器与正向迭代器相比就是从数据的末端向前面访问遍历但是两个迭代器的用法都是一样的就是下一个*就可以访问到数据但是它具体是怎么实现的呢我们接下来看一看 1. 基本构造 在list的模拟实现中讲解了如何实现正向迭代器包含const版本和非const版本那么在本期实现反向迭代器的时候就有了一定的前车之鉴比如const版本和非const版本不需要实现两份代码可以采用模板实现泛型编程。 反向迭代器的构造可以使用正向迭代器来进行复用因为反向迭代器的就是正向迭代器里面的--所以在传递模板参数的时候可以直接传递一个迭代器直接复用这个迭代器里面的各种结构完成反向迭代器的构造。这种方式叫做迭代器适配器。 #pragma oncenamespace ywh {//反向迭代器template class Iterator, class Ref, class Ptrclass ReverseIterator{public:typedef ReverseIteratorIterator, Ref, Ptr Self;//构造ReverseIterator(Iterator it):_it(it){}private:Iterator _it;}; }2. 接口完善 反向迭代器的接口有、--、*、-、!、这些接口的实现都是可以通过使用模板参数中的迭代器来进行复用即可。 头文件 reverse_iterator.h #pragma oncenamespace ywh {//反向迭代器template class Iterator, class Ref, class Ptrclass ReverseIterator{public:typedef ReverseIteratorIterator, Ref, Ptr Self;//构造ReverseIterator(Iterator it):_it(it){}//前置//operatorSelf operator(){//复用传过来的迭代器里面的operator----_it;return *this;}//operator--Selfoperator(){_it;return *this;}//operator*Ref operator*(){return *_it;}//operator-Ptr operator-(){return _it.operator-();}//operatorbool operator(const Self s){return _it s._it;}//operator!bool operator!(const Self s){return _it ! s._it;}private:Iterator _it;}; }3. 在list中使用反向迭代器 要使用反向迭代器首先得在list头文件中包含以下反向迭代器的头文件然后进行构造 list反向迭代器版本一 #pragma once #include reverse_iterator.h namespace ywh {//链表结构templateclass Tstruct list_node{T _data; //节点中的数据list_nodeT* _prev; //指向前一个节点的指针list_nodeT* _next; //指向后一个节点的指针//构造list_node(const T x T()):_data(x), _prev(nullptr), _next(nullptr){}};//正向迭代器// 类型模板参数 传递引用 传递指针templateclass T, class Ref, class Ptrstruct __list_iterator{typedef list_nodeT Node;typedef __list_iteratorT, Ref, Ptr self;Node* _node;//迭代器构造__list_iterator(Node* node):_node(node){}//前置//operatorself operator(){_node _node-_next;return *this;}//operator--self operator--(){_node _node-_prev;return *this;}//后置self operator(int){self* tmp(_node);_node _node-_next;return tmp;}//operator--self operator--(int){self* tmp(_node);_node _node-_prev;return tmp;}//operator*Ref operator*(){return _node-_data;}//operator-Ptr operator-(){return _node-_data;}//operator!bool operator!(const self s){return _node ! s._node;}//operatorbool operator(const self s){return _node s._node;}};//list结构templateclass Tclass list{public:typedef list_nodeT Node;typedef __list_iteratorT, T, T* iterator; //非const迭代器typedef __list_iteratorT, const T, const T* const_iterator; //const迭代器typedef ReverseIteratoriterator, T, T* reverse_iterator; //反向迭代器typedef ReverseIteratorconst_iterator, const T, const T* const_reverse_iterator; //反向迭代器public:基本构造/////...///正向迭代器iterator begin(){return iterator(_head-_next); //使用匿名对象进行构造}iterator end(){return iterator(_head);}const_iterator begin() const{return const_iterator(_head-_next);}const_iterator end() const{return const_iterator(_head);}//反向迭代器/reverse_iterator rbegin(){return reverse_iterator(--end());}reverse_iterator rend(){return reverse_iterator(end());}const_reverse_iterator rbegin() const{return const_reverse_iterator(--end());}const_reverse_iterator rend() const{return const_reverse_iterator(end());}///修改相关接口//...private:Node* _head; //链表的头节点size_t _size; //节点个数}; } list反向迭代器版本二  我们也可以看一下库里面list的反向迭代器如何设计 可以看到库里面的玩法是一种对称的结构这种对称的结构在解引用访问时访问的是下一个节点的元素这样子写是比较好理解的正向的起始就是反向的结束正向的结束就是反向的起始那么我们也可以来按照这种写法来写一下 头文件reverse_iterator.h #pragma once namespace ywh {//反向迭代器template class Iterator, class Ref, class Ptrclass ReverseIterator{public:typedef ReverseIteratorIterator, Ref, Ptr Self;//构造ReverseIterator(Iterator it):_it(it){}//前置//operatorSelf operator(){//复用传过来的迭代器里面的operator----_it;return *this;}//operator--Selfoperator(){_it;return *this;}//operator*Ref operator*(){Iterator cur _it;//返回下一个节点的数据return *(--cur);}//operator-Ptr operator-(){return _it.operator-();}//operatorbool operator(const Self s){return _it s._it;}//operator!bool operator!(const Self s){return _it ! s._it;}private:Iterator _it;}; }头文件List.h #pragma once #include reverse_iterator.h namespace ywh {//链表结构templateclass Tstruct list_node{T _data; //节点中的数据list_nodeT* _prev; //指向前一个节点的指针list_nodeT* _next; //指向后一个节点的指针//构造list_node(const T x T()):_data(x), _prev(nullptr), _next(nullptr){}};//正向迭代器// 类型模板参数 传递引用 传递指针templateclass T, class Ref, class Ptrstruct __list_iterator{typedef list_nodeT Node;typedef __list_iteratorT, Ref, Ptr self;Node* _node;//迭代器构造__list_iterator(Node* node):_node(node){}//前置//operatorself operator(){_node _node-_next;return *this;}//operator--self operator--(){_node _node-_prev;return *this;}//后置self operator(int){self* tmp(_node);_node _node-_next;return tmp;}//operator--self operator--(int){self* tmp(_node);_node _node-_prev;return tmp;}//operator*Ref operator*(){return _node-_data;}//operator-Ptr operator-(){return _node-_data;}//operator!bool operator!(const self s){return _node ! s._node;}//operatorbool operator(const self s){return _node s._node;}};//list结构templateclass Tclass list{public:typedef list_nodeT Node;typedef __list_iteratorT, T, T* iterator; //非const迭代器typedef __list_iteratorT, const T, const T* const_iterator; //const迭代器typedef ReverseIteratoriterator, T, T* reverse_iterator; //反向迭代器typedef ReverseIteratorconst_iterator, const T, const T* const_reverse_iterator; //反向迭代器public:基本构造/////...///正向迭代器iterator begin(){return iterator(_head-_next); //使用匿名对象进行构造}iterator end(){return iterator(_head);}const_iterator begin() const{return const_iterator(_head-_next);}const_iterator end() const{return const_iterator(_head);}//反向迭代器/reverse_iterator rbegin(){return reverse_iterator(end());}reverse_iterator rend(){return reverse_iterator(begin());}const_reverse_iterator rbegin() const{return const_reverse_iterator(end());}const_reverse_iterator rend() const{return const_reverse_iterator(begin());}///修改相关接口//...private:Node* _head; //链表的头节点size_t _size; //节点个数}; } 4. 在vector中使用反向迭代器  vector中的反向迭代器不建议使用上面的版本一因为begin()和end()是传值返回是临时对象而临时对象具有常性不好进行修改所以还是比较建议使用这种对称的结构。 头文件Vector.h #pragma once #include assert.h #include reverse_iterator.h namespace ywh {templateclass Tclass 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;public:/正向迭代器iterator begin(){return _start;}iterator end(){return _finish;}const_iterator begin() const{return _start;}const_iterator end() const{return _finish;}/反向迭代器/reverse_iterator rbegin(){return reverse_iterator(end());}reverse_iterator rend(){return reverse_iterator(begin());}const_reverse_iterator rbegin() const{return const_reverse_iterator(end());}const_reverse_iterator rend() const{return const_reverse_iterator(begin());}/基本构造/////...///容量//...///修改//...private:iterator _start nullptr; //起始位置iterator _finish nullptr; //有效数据位置iterator _end_of_storage nullptr; //结束位置}; } 朋友们、伙计们美好的时光总是短暂的我们本期的的分享就到此结束欲知后事如何请听下回分解~最后看完别忘了留下你们弥足珍贵的三连喔感谢大家的支持
http://www.yutouwan.com/news/426440/

相关文章:

  • 绵阳哪个网站做外卖做的好尚海整装官网门店电话
  • 济南做设计公司网站网站建设的流程简答题
  • php做网站毕设答辩问什么做免费资料分享网站会不会涉及版权
  • 万网网站空间服务范围深圳网站开发的公司
  • 阿里建站平台官网广告合作
  • 58同城石家庄网站建设怎么做网站用户可以发表文章
  • 腾讯风铃怎么做网站慈溪做无痛同济 amp 网站
  • 禅城网站建设企业如何自己做个简单网站
  • 网站这么绑定到域名wordpress数据库新增用户密码忘记
  • 建设网站几钱优质服务的网站建设
  • 怎么用PS做网站广告图wordpress 过滤
  • 氧os哪个网站做的最好兴义网站建设的公司
  • 网站制作与建设书籍万户网站建设公司
  • 公司网站建设建设彩票网站的统计怎么做
  • 湖南郴州建设局网站网站制作合同模板
  • 福州最好的网站建设网络公司wordpress 分类seo
  • 鹏翔科技 网站建设网络销售挣钱吗
  • 移动终端的网站网页设计与制作教程的页数是
  • 德兴网站seo优秀的网页设计案例
  • 纪检监察网站建设情况汇报自己开发小程序
  • 做vlogger的网站有哪些渠道游戏官网
  • 知名小蚁人网站建设哪项不属于网站架构
  • 网站建设费按多少年摊销凡科网做网站教程
  • 网站后台怎么做下载链接青岛网站建设找
  • 网站关键词长度绍兴聚氨酯制作公司
  • 网站推广的方式有哪些找人做网站安全吗
  • 宣城市建设监督管理局网站下载联通公网ip申请 做网站
  • 山东省建设监理协会网站网站建设个人网银
  • 如何建立内外网网站微信小程序怎么下载
  • 推销网站话术建设银行 网站设置密码