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

档案网站建设优秀代表门户网站开发 南宁

档案网站建设优秀代表,门户网站开发 南宁,常州工厂网站建设,小制作小发明手工小学生文章目录 前言大体框架#xff1a; 一、节点的封装#xff08;list_node#xff09;二、迭代器的封装(_list_iterator)1.类模板的定义#xff1a;2.构造函数3.前置#xff0c;后置4.前置--#xff0c;后置--5.解引用(operator*())6. -重载#xff08;operator- … 文章目录 前言大体框架 一、节点的封装list_node二、迭代器的封装(_list_iterator)1.类模板的定义2.构造函数3.前置后置4.前置--后置--5.解引用(operator*())6. -重载operator- ()7.比较运算符的重载 三、list成员函数1.构造函数2.begin(),end()3.插入insert在pos之前一个位置插入4.删除erase5.尾插尾删6.头插头删7.析构函数8.赋值运算符重载9.拷贝构造函数10.大小size 前言 list的底层结构为带头结点的双向循环链表 大体框架 namespace simulation {template class Tstruct list_node {//成员函数}; templateclass T,class Ref,class Ptrstruct _list_iterator {//成员函数};templateclass Tclass list {typedef list_nodeT Node;public:typedef _list_iteratorT, T, T* iterator;typedef _list_iteratorT, const T, const T* const_iterator;//成员函数private:Node* _head;size_t _size;};} 一、节点的封装list_node template class Tstruct list_node {//带头的双向循环链表//在类模板中//类名不等于类型所以定义指针时类名要显示实例化list_nodeT* _prev;list_nodeT* _next;T _val;list_node(const TvalT())//T相当于调用构造函数:_prev(nullptr),_next(nullptr),_val(val){}};二、迭代器的封装(_list_iterator) 因为list的数据不是在一片连续的内存中像vectorstring那样 所以我们不能用原生指针来当迭代器iterator我们要自己设计一个 迭代器自己去实现其以及比较等操作 1.类模板的定义 //设计const迭代器可以把迭代器理解为类似指针// 错误示范 typedef const __list_iteratorT const_iterator;// 这样设计const迭代器是不行的因为const迭代器期望指向内容不能修改// 这样设计是迭代器本身不能修改//为了设计不那么繁琐我们传入三个模板参数templateclass T,class Ref,class Ptr//相当于// typedef __list_iteratorT, T, T* iterator;// typedef __list_iteratorT, const T, const T* const_iterator;2.构造函数 typedef list_nodeT Node;typedef _list_iteratorT, Ref, Ptr self;Node* _node;//成员变量_list_iterator(Node* node):_node(node){}3.前置后置 self operator() {//前置//typedef _list_iteratorT, Ref, Ptr self;_node _node-_next;return *this;}self operator(int) {//后置self tmp(*this);_node _node-_next;return tmp;}4.前置–后置– self operator--() {_node _node-_prev;return *this;}self operator--(int) {self tmp(*this);_node _node-_prev;return tmp;}5.解引用(operator*()) Ref operator*() {//因为可能为const T类型或者T类型//为了避免繁琐使用模板参数里面的Ref//编译器根据不同的类型会生成对应的函数return _node-_val;}6. -重载operator- () //templateclass T,class Ref,class Ptr//相当于// typedef __list_iteratorT, T, T* iterator;// typedef __list_iteratorT, const T, const T* const_iterator; Ptr operator-() {return_node-_val;}7.比较运算符的重载 bool operator!(const self it)const {return _node ! it._node;}bool operator(const self it)const {return _node it._node;}三、list成员函数 1.构造函数 typedef list_nodeT Node;public:typedef _list_iteratorT, T, T* iterator;typedef _list_iteratorT, const T, const T* const_iterator;void empty_init() {_size 0;_head new Node;_head-_prev _head;_head-_next _head;}list() {//构造函数empty_init();}privateNode*_head;//哨兵位size_t _size; 2.begin(),end() iterator begin() {//begin为哨兵位下一个return _head-_next;}const_iterator begin()const {return _head-_next;}//end为哨兵位iterator end() {return _head;}const_iterator end()const {return _head;}3.插入insert在pos之前一个位置插入 在list中进行插入时是不会导致list的迭代器失效的只有在删除时才会失效并且失效的只是指向被删除节点的迭代器其他迭代器不会受到影响。 iterator insert(iterator pos, const T x) {Node* cur pos._node;Node* prev cur-_prev;Node* newnode new Node(x);newnode-_prev prev;newnode-_next cur;prev-_next newnode;cur-_prev newnode;_size;//返回指向第一个新插入元素的迭代器。return newnode;}4.删除erase 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;--_size;//返回被删除节点的下一个位置return next;}5.尾插尾删 void push_front(const T x) {insert(begin(), x);}void pop_back() {erase(--end());}6.头插头删 void push_back(const Tx) {insert(end(), x);} void pop_front() {erase(begin());}7.析构函数 void clear() {iterator it begin();while (it ! end()) {it erase(it);}_size 0;}~list() {clear();delete _head;_head nullptr;}8.赋值运算符重载 void swap(listTlt){std::swap(_head, lt._head);std::swap(_size, lt._size);}listToperator(listT lt) {swap(lt);return *this;}9.拷贝构造函数 list(const listT lt) {empty_init();_size lt._size;for (auto ch : lt) {push_back(ch);}}10.大小size size_t size() {return _size;}
http://www.pierceye.com/news/156329/

相关文章:

  • .asp网站怎么做需要一个网站
  • 免费网站代码大全网站开发费入什么费用
  • 网站域名注册多少钱搜索引擎优化工具深圳
  • 学建设网站去哪里学建网站要大约多少钱
  • 网站正则表达式怎么做网站维护一般需要多久
  • 北京网站优化价格有没有做花卉种子的网站啊
  • 资源型网站建设 需要多大硬盘vi设计方案模板
  • 网站怎么做图片放映效果代码怎么生成网站
  • 怎么写代码做网站建投商务网官网
  • 江西那家做网站公司好各类网站建设
  • 做网站和服务器的大小有关吗it培训课程
  • 湖南网站建设公司 搜搜磐石网络网站推广模板
  • 网站是软件吗页网站设计
  • 网站服务器搭建及配置的具体步骤如果自己制作网站
  • 湖北餐饮网站建设做排版的网站
  • 广东省建设教育协会官方网站首页世界上最有趣的网站
  • 平面构成作品网站手机网页qq登录
  • 厦门app开发网站开发公司电话重庆网站排名外包
  • 个人备案经营网站用自己网站做邮箱域名解析
  • 为什么大公司开发网站做英文网站网站犯法吗
  • 大连网站seo陇西网站建设公司
  • 电力建设工程质监总站网站域名使用费用一年多少钱
  • 建设单位网站经费请示上海外国语大学学风建设网站
  • 优秀网站管理员wordpress淘宝客模板下载
  • 广州越秀区网站建设手工制作简单又漂亮
  • 西安商城网站开发网站建设前台后台教程
  • 网站投放天津塘沽爆炸事件
  • 360网站安全检测自己买个服务器做网站
  • 临汾市网站建设网站版式分类
  • 广东的一起(17)做网站东莞建工集团企业网站