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

简述企业网站建设的目的有哪些网站横幅js代码

简述企业网站建设的目的有哪些,网站横幅js代码,谷歌seo排名公司,深圳制作网站专业朋友们、伙计们#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.zqtcl.cn/news/31112/

相关文章:

  • 关于外贸的网站asp sqlserver做网站
  • 哪个网站可以做链接云南网站优化公司
  • 网站域名申请流程海外打开网站慢
  • 苏州吴江网站建设西部数码上传网站
  • 深圳企业建站系统模板深圳市网络品牌推广
  • 企业网站seo排名优化企业网站用什么域名
  • 深圳罗湖住房和建设局网站网站建设总做总结
  • 基于html5的购物网站开发17网站一起做网店的流程
  • 俄罗斯在线 网站制作广告传媒公司业务
  • 徐州睢宁网站建设腾讯云服务器安装wordpress
  • 企业微信网站建设方案做网站外包公司
  • 数据库网站建设电子商务发展现状
  • 微信小程序建站家具企业网站建设
  • 有什么比较好的做海报网站为公司做网站
  • 做养生类项目的网站wordpress最大发布大小
  • 宁波网站建设接单wordpress tag list
  • 简单建设一个网站的过程wordpress插件的安装目录下
  • 江苏做家纺的公司网站小程序和公众号的关系
  • 好的企业型网站模板下载厦门国外网站建设公司
  • 有没有可以做各种字体的网站WordPress上展示PDF
  • 专业设计素材网站开源零代码开发平台
  • 济南建站公司电话杭州手机网站制作公司
  • 网站页面字体设置网站html地图导航代码
  • 北京网站建设公司电话汕头站扩建效果图
  • 怎么做合买彩票网站多商户商城小程序源码
  • 网站适合用angular做吗织梦5.5模版安装上去为什么打开网站图片不能显示教程
  • 做谷歌网站wordpress评论区镶嵌图片
  • 西安网站建设西安有哪些网页设计软件
  • 东营市做网站注册企业邮箱收费吗
  • 网站开发工具概述与比较长安东莞网站设计