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

免费建设网站教程那些知名网站是外包做的

免费建设网站教程,那些知名网站是外包做的,快速知彼网络网站建设,山东潍坊新闻一、成员变量及其基本结构 1.基本结构模型 本质是一个带头双向循环列表#xff0c;将节点进行封装#xff0c;并且为了方便使用#xff0c;进行重定义 2.节点的封装定义 templateclass T//定义节点struct list_node{list_nodeT* _prev;list_nodeT…一、成员变量及其基本结构 1.基本结构模型 本质是一个带头双向循环列表将节点进行封装并且为了方便使用进行重定义 2.节点的封装定义 templateclass T//定义节点struct list_node{list_nodeT* _prev;list_nodeT* _next;T _data;list_node(const T x T()) :_prev(nullptr),_next(nullptr),_data(x){}}; 在定义节点时要注意将初始化一起进行封装完成提供默认构造函数 3.成员变量的定义 成员变量是一个哨兵位的头结点 typedef list_nodeT node;//对节点重命名方便使用 private:list_nodeT* _head; 二、迭代器重点 1.介绍 list的迭代器用原生指针无法实现需要对原生指针进行封装然后对顺序表指针的行为操作进行模拟实现是list模拟实现中最大的重点难点此时从使用者的角度上看依然能将iterator看作为指针去使用但设计者的角度上看其本质是一个指针的封装是个自定义类型。 2.对指针的基本封装 templateclass T struct __list_iterator {typedef list_nodeint node;//将节点重定义方便使用typedef __list_iteratorint self;//将类型重定义方便使用//成员变量node* _node;//初始化__list_iterator(node* n):_node(n){}//模拟实现指针操作... } 以上对节点指针进行了封装处理之后逐一实现常用的功能例如 、--、* 、 - 、 、! 等等 3.和-- 要提供迭代器和--的操作需要对运算符进行重载链表迭代器的本质上是获得下一个节点的地址--则是前一个节点的地址并且要区分前置和后置 //slef operator(){_node _node-_next;return *this;}slef operator(int)//后置{slef tmp(*this);_node _node- _next;return tmp;}//--self operator--(){_node _node-_prev;return *this;}self operator--(int){self tmp(*this);_node _node-_prev;return tmp;} 4. 和 ! 迭代器的比较本质是要比较其封装在内部的指针是否同一个 bool operator!(const self n) {return _node ! n._node; }bool operator(const self n) {return _node n._node; } 5. * 和 - 对解引用操作符的重载则需要考虑到常量迭代器的调用常量迭代器去本质是对迭代器所指向的内容进行常量化因此在这里const_iterator 和 iterator 的核心区别在于解引用后返回的值是否常量其他功能相同因此可以使用类模板去控制这两个运算符重载返回值的区别在定义部分加上两个新的模板参数即可。 templateclass T,class Ref,class Ptr strucr __list_iterator {...//定义和重命名等等Ref operator*()// Ref T迭代器 / const T常量迭代器{return _node-_data;}//对于-的重载存在特殊处理只需要返回Ptr operator-()// Ptr T*迭代器/ const T*常量迭代器{return _node-_data;} }// 迭代器定义部分在list类内定义 // typedef __list_iteratorT,T,T* iterator; // typedef __list_con_iteratorT,const T,const T*; 三、构造与析构 1.默认构造函数 默认构造需要初始化出一个哨兵位的头结点并且让节点指针指向自己为了方便其他构造函数初始化哨兵位的头结点可以单独写一个函数进行复用 void empty_init(){_head new node;_head-_next _head;_head-_prev _head;}list()//直接的初始化{empty_init();} 2.用迭代器区间去构造 迭代器区间构造需要借助函数模板任意类型的迭代器都可以将值拷贝到容器中 templateclass Iterator list(Iterator first,Iterator last) {//先得初始化容器empty_init();while(first ! last){push_back(*first); // 底层是first;} } 3.拷贝构造 拷贝构造这里选择对上面的构造函数进行复用深拷贝出一个tmp在进行交换 void swap(listT lt){std::swap(_head, lt._head);}list(const listT lt)//拷贝构造{empty_init();listT tmp(lt.begin(), lt.end());swap(tmp);} 4.赋值重载 赋值重载的底层实现也是在传参的时候调用了拷贝构造实现深拷贝后在进行交换 listT operator(listT lt)//赋值重载{swap(lt);return *this;} 5.析构函数 可以先实现clear然后复用底层就是将所有节点全部逐一释放用迭代器遍历释放即可 void clear(){iterator it begin();while (it ! end()){it erase(it);}}~list()//析构{clear();delete _head;_head nullptr;}四、增删操作 对应增删操作只需要实现insert和erase其余的头插头删等等都可以对其进行复用这里是用迭代器去实现的。 void insert(iterator pos, const T x){node* cur pos._node;node* prev cur-_prev;node* new_node new node(x);//链接new_node-_prev prev;prev-_next new_node;new_node-_next cur;cur-_prev new_node;}iterator erase(iterator pos){assert(pos ! end());node* cur pos._node;node* prev cur-_prev;node* next cur-_next;delete cur;//链接prev-_next next;next-_prev prev;return iterator(next);} 需要注意的是erase后迭代器会失效因此为了部分场景下的方便erase是有一个返回值的返回的是下一个节点的迭代器 总结 本章通过自行模拟实现了list加深了类和对象以及list的相关知识其中很重要的一个知识点就是对与list迭代器的封装和实现本篇博客整理了整个实现过程的思路方便今后复习和其他同学参考学习
http://www.pierceye.com/news/789327/

相关文章:

  • 教育网站制作视频代理网址ag80hncom
  • 泰兴公司做网站建设制作外贸网站公司
  • 手机wap网站大全作品提示优化要删吗
  • 郑州网站建设技术支持云南澄江县建设局网站
  • wordpress建企业网站设置网站一级域名和二级域名
  • 云南省城乡与住房建设厅网站合肥网红打卡地
  • 用dw做的企业网站宁波seo优化费用
  • 网站制作开发建网站公司 蓝纤科技
  • 怎样到国外做合法网站法网站网站建设小组实验报告
  • DNF做钓鱼网站网站建设方案书编写
  • 提高网站粘性wordpress tag中文
  • 公司已有网站 如何自己做推广wordpress的音乐插件怎么用
  • 权威网站php wordpress 等
  • 建设网站企业公司中通建设计院第四分公司网站
  • 快站免费网站建设哪家好南宁市住房建设局网站
  • 学生做的网站成品roseonly企业网站优化
  • 台前网站建设电话百度账号注册申请
  • 政和县建设局网站公告征婚网站咋做
  • 做网站需要用到的语言注册公司需要多少钱保证金
  • 如何给别人做网站赚钱互联网广告营销方案
  • 上海专业做网站公司地址软文代写
  • 家居网站源码宁波专业建设网站建站公司
  • 成都网站建设 Vr功能 卓 公司网站后台管理系统怎么用
  • 微站网建站系统南昌科技网站建设
  • 商家网站建设模板快速备份wordpress
  • 网站建设推广价格肯德基网站建设
  • 网站开发课程百度云平湖公司做网站
  • 手机网站建设品牌什么是企业云网站建设
  • 烟台网站建设推荐企汇互联见效付款58同城网站模板
  • 琪恋网站建设深圳3d网站建设