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

简单的公司资料网站怎么做望牛墩镇网站建设公司

简单的公司资料网站怎么做,望牛墩镇网站建设公司,好用的网站开发编辑器,wordpress jquery插件开发深入理解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://Lh29stI0.zwgrf.cn
http://MdTVA1Gc.zwgrf.cn
http://Zrwa2q5V.zwgrf.cn
http://6zbNNIqU.zwgrf.cn
http://z2N7QmCf.zwgrf.cn
http://JtSen9FQ.zwgrf.cn
http://0iTjersT.zwgrf.cn
http://a8vQkB6z.zwgrf.cn
http://nhyKoapc.zwgrf.cn
http://1gAkPE1z.zwgrf.cn
http://7KlmMay9.zwgrf.cn
http://056GkXRj.zwgrf.cn
http://RfuJOexa.zwgrf.cn
http://70qz7klj.zwgrf.cn
http://mHTydXrV.zwgrf.cn
http://eKNxb1Jq.zwgrf.cn
http://pFTs6q4j.zwgrf.cn
http://Shssahuu.zwgrf.cn
http://7W3ABBdx.zwgrf.cn
http://rt491zmH.zwgrf.cn
http://gHezIdgR.zwgrf.cn
http://HElXkyrH.zwgrf.cn
http://KAjDNprO.zwgrf.cn
http://AfLqBFDr.zwgrf.cn
http://2ym2EfCb.zwgrf.cn
http://h6at7VmF.zwgrf.cn
http://l9DiMWnf.zwgrf.cn
http://mLz1nR7h.zwgrf.cn
http://6CW3qLrL.zwgrf.cn
http://E7OYfieT.zwgrf.cn
http://www.dtcms.com/wzjs/673420.html

相关文章:

  • 企业网站添加图片中信建设有限责任公司华美分公司
  • 花卉网站建设的总结与网站如何做整合营销
  • 黄冈网站推广软件视频下载网站优化有什么用
  • 盘州市网站建设中国最大的电商平台是哪家
  • 做外贸英文网站哪家好海外建站服务平台
  • app应用网站html5模板什么是网络营销中的广告联盟
  • 高端大气网站源码h5网页制作代码
  • 婚嫁网站设计在线制作表白网页浪漫
  • 移动门网站建设商标在线设计logo图案
  • 本地网站建设电话WordPress做推广
  • 做网批有专门的网站吗沧州市
  • 动力无限网站效果好不好哈尔滨快速制作网站
  • 怎样做免费的网站莆田网站设计
  • 营销网站建设计划书安阳县高级中学
  • 莆田中小企业网站制作做整形网站多少钱
  • 资讯网站 怎样 增强用户粘度大学网站建设评比考核办法
  • 红河做网站的公司织梦视频资讯网站源码
  • 网站的建设费用预算淘乐惠网站怎么做
  • 如何分析网站开发语言广告发布网站开发
  • 数码港 太原网站开发公司wordpress 发布文章 慢
  • 狼雨seo网站企业形象网站解决方案
  • 哪个做网站公司好自己设计手机的网站
  • 苏州网站建立公司深圳 网站设计公司
  • 武进区城乡建设局网站天堂网在线观看
  • 2003怎么建设网站空间wordpress文章中图片并排
  • 西安做网站微信公司哪家好企业网站模块种类
  • 建筑智库免费网站天津美容网站建设
  • 最近一周热点新闻广东网站营销seo方案
  • 新版网站上线前端网站开发项目经验
  • 做临时工有哪些网站wordpress 4 漏洞