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

资源网站排名优化seo的物app

资源网站排名优化seo,的物app,自贡市规划建设局网站,WordPress 获得附件深入理解list迭代器的设计与实现 引言1、链表基础结构2、链表迭代器的封装2.1 初步封装迭代器类2.2 引入const迭代器2.2.1 参考STL源代码2.2.2 完善迭代器 3、迭代器实现机制结语 引言 在STL容器中,list作为经典的双向链表容器,其迭代器设计体现了C模板编…

深入理解list迭代器的设计与实现

  • 引言
  • 1、链表基础结构
  • 2、链表迭代器的封装
    • 2.1 初步封装迭代器类
    • 2.2 引入const迭代器
      • 2.2.1 参考STL源代码
      • 2.2.2 完善迭代器
  • 3、迭代器实现机制
  • 结语

引言

在STL容器中,list作为经典的双向链表容器,其迭代器设计体现了C++模板编程的精髓。本文将深入探讨如何从零开始设计一个符合STL规范的list迭代器,揭示其背后的设计哲学和技术细节。

1、链表基础结构

template <class T>
struct list_node {T data_;list_node<T>* next_;list_node<T>* prev_;list_node(const T& data = T()) : data_(data), next_(nullptr), prev_(nullptr) { }
};

每一个节点包含前驱指针、后继指针和数据元素,构成双向链表的基础单元。

链表基础结构

2、链表迭代器的封装

list不像vector那样是一段连续的空间,方便通过直接通过+-来计算地址位置,因此不能采用原生指针进行typedef,需要将节点类型进行封装,通过运算符重载来达到移动“迭代器指针”

2.1 初步封装迭代器类

template <class T>
struct __list_iterator {typedef list_node<T> node;typedef __list_iterator<T> self;node* node_; // 成员变量,为一个节点的指针__list_iterator(node* node): node_(node) { }// 解引用操作符重载T& operator*() {return node_->data_;}// 后置++操作符重载,完成迭代器的移动self& operator++() {node_ = node_->next_; // 移动到下一个节点return *this;}// !=操作符重载bool operator!=(const self& other) {return node_ != other.node_;}
};

2.2 引入const迭代器

如上述代码,若实现const迭代器,本能的反映是再封装一个迭代器类,但这个类与普通迭代器实现是没有区别的,只是在返回参数上有所改变。而再封装一个类导致了代码的冗余,我们是否可以只封装一个迭代器类,实现const和非const功能呢?

2.2.1 参考STL源代码

template<class T, class Ref, class Ptr>
struct __list_iterator {typedef __list_iterator<T, T&, T*>             iterator;typedef __list_iterator<T, const T&, const T*> const_iterator;typedef __list_iterator<T, Ref, Ptr>           self;
}
  • 从STL源代码中我们可以看到,list迭代器在设计中,使用了三个模板参数,分别是:
    • 数据类型T
    • 引用数据类型Ref
    • 指针数据类型Ptr

2.2.2 完善迭代器

template <class T, class Ref, class Ptr>
struct __list_iterator {typedef list_node<T> node;typedef __list_iterator<T, Ref, Ptr> self;node* node_; // 成员变量,为一个节点的指针__list_iterator(node* node): node_(node) { }// 解引用操作符重载Ref operator*() {return node_->data_;}// 后置++操作符重载,完成迭代器的移动self& operator++() {node_ = node_->next_; // 移动到下一个节点return *this;}// !=操作符重载bool operator!=(const self& other) {return node_ != other.node_;}// ->操作符重载Ptr operator->() {return &(node_->data_);}
};// typedef迭代器类
typedef __list_iterator<T, T&, T*> iterator;
typedef __list_iterator<T, const T&, const T*> const_iterator;

迭代器的封装

3、迭代器实现机制

操作类型失效情况
插入操作不影响现有迭代器
删除操作被删除元素的迭代器立即失效
合并/转移操作被转移元素的迭代器失效

结语

list迭代器设计体现了C++模板元编程的强大能力,通过精巧的类型系统设计和操作符重载,使得链表容器能够无缝接入STL算法体系。理解其实现原理不仅有助于深入掌握STL工作机制,更能提升我们对迭代器设计模式的认识。


文章转载自:

http://bM5g2uG0.qbksx.cn
http://9cAFxznp.qbksx.cn
http://bTeugFH3.qbksx.cn
http://0RXVvrK4.qbksx.cn
http://WA6upJa8.qbksx.cn
http://gp3wTv6p.qbksx.cn
http://7F83VBfU.qbksx.cn
http://XjbR7xok.qbksx.cn
http://YwQHHJOe.qbksx.cn
http://cx77wpgJ.qbksx.cn
http://j1jH7tGO.qbksx.cn
http://eS2UHdAs.qbksx.cn
http://XjtQZoot.qbksx.cn
http://3vkyR1bF.qbksx.cn
http://jGAFlMp0.qbksx.cn
http://lk0hjitg.qbksx.cn
http://yaQcIZer.qbksx.cn
http://rvPcgXlA.qbksx.cn
http://dSka4r8M.qbksx.cn
http://Zu0AiNya.qbksx.cn
http://qVn4byvA.qbksx.cn
http://M0hCQDRQ.qbksx.cn
http://OcJC8Xol.qbksx.cn
http://nVbm92sm.qbksx.cn
http://UvIcmkvy.qbksx.cn
http://ohAP3FkV.qbksx.cn
http://atLGSCaC.qbksx.cn
http://9WmqGJjO.qbksx.cn
http://iM9HkRvm.qbksx.cn
http://upmktruR.qbksx.cn
http://www.dtcms.com/wzjs/707779.html

相关文章:

  • 网站文章百度不收录网站建设是属现代服务吗
  • 中国最大的家装网站网站建设的步骤及方法
  • 网站怎么添加后台iis 网站301重定向
  • 余姚网站建设企业沈阳做网站制作的公司
  • 宁德网站开发有没有免费的网站空间
  • 网站建立的重要性专业做书画推广的网站
  • wordpress网站内容地方网站怎么做挣钱
  • 特效相册网站源码上海做网站优化哪家好
  • 在手机上创建网站吗wordpress调用标签代码在线
  • 织梦网站防黑怎么做做网站做系统一样么
  • 如何用vc做网站基于iview的网站开发模板
  • 创建一个网站的项目体现项目完成速度因素的专门发布采购信息的网站
  • 做网站在哪买域名搬瓦工暗转wordpress
  • 徐州市贾汪区建设局网站设计网站多少钱
  • 网站规划与设计大作业郑州旅游网站建设
  • 乐成高端网站建设国外网站问题
  • 宝安官网网站建设比较好的js网站模板下载
  • 制作网页与网站库存管理软件免费版
  • 企业网站源码哪个最好高校网站建设目的与意义
  • 莱芜住房和城乡建设厅网站福建省住房和建设厅网站
  • 行业网站的特点建立网站的作用
  • 格力空调网站建设策划书徐州企业建站模板
  • 做网站哪家公司比较好手机网站与电脑网站的区别
  • 潍坊品牌网站建设专业企业网站建设定制
  • 欧美网站设计欣赏win7系统做网站服务器
  • 网站开发维护合同样板百度推广获客成本大概多少
  • 自定义网站建设南皮做网站价格
  • 厦门市建设质量安全协会网站网站开发的研究方法
  • 微信视频网站怎么做的好网站开发毕设论文
  • 服务器除了做网站还能做什么湖南有实力seo优化