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

备案网站注意事项淘宝客seo推广教程

备案网站注意事项,淘宝客seo推广教程,网站建设课程毕设,网站运营外包方案一、成员变量及其基本结构 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.dnsts.com.cn/news/2688.html

相关文章:

  • zencart网站地图生成怎么去做网络推广
  • wordpress ip排行好看的seo网站
  • 龙华网站建设网站定制培训网登录入口
  • 建筑网站转发西安seo关键字优化
  • 怎么做网站底部文件seo关键词优化价格
  • 日照网站建设咨询报价西安网站搭建
  • 制作一个网站的费用山东济南最新消息
  • 做网站优化用什么软件如何建立网上销售平台
  • 网站被做跳转怎么办seo辅助工具
  • 大连公司企业网站建设青岛网站快速排名提升
  • 网站建立计划书搜索引擎营销策划方案
  • 网站标签怎么做百度网页推广费用
  • 做网站视频用哪个视频编辑软件如何推广网站方法
  • 免费微网站与公众号平台对接搜索引擎营销方法
  • 做网站是哪个专业注册公司网上申请入口
  • 广发证券 网站谁做的百度推广工具
  • 做网络推广的网站兰州seo培训
  • 怎么做网站登陆战seo优化与推广招聘
  • 权威的合肥网站建设2023免费网站推广大全
  • 云免网站空间百度seo关键词排名价格
  • 娃哈哈网站建设策划书广东又出现新病毒
  • 做企业网站什么软件好百度云搜索引擎入口盘多多
  • 购物网站开发的目的意义pc端网页设计公司
  • 企业网站建设物美价廉交易链接
  • 做网站备案的公司seo入门版
  • 做国际物流需要自己的网站吗网页设计代做
  • 动态网站转静态网站网站关键词优化公司哪家好
  • asp网站下载优化深圳seo
  • 淘宝客怎么做的网站推广学网络运营在哪里学比较好
  • 绍兴市网站建设公司网站seo视频教程