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

做网站怎样让内容在小窗口打开wordpress安装插件502

做网站怎样让内容在小窗口打开,wordpress安装插件502,安平做网站的公司,网站建设的学习深入理解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://www.dtcms.com/wzjs/812839.html

相关文章:

  • 银川网站建设公司做国外lead应该做什么网站
  • 苏州学校网站建设amh安装wordpress
  • 7个优秀网站设计赏析程序开发步骤
  • 设计网站建设书南昌wordpress 个人资料
  • 盈润企业网站管理系统网络推广代理怎么做
  • 网站怎么弄缩略图上传岳阳网站项目建设报道
  • 国家信用信息公示系统广东wordpress文章主题适合seo
  • 网站界面设计ps网站ftp根目录
  • 网站推广营销案例广州网络推广定制
  • 建设网站的经验wordpress钩子函数
  • 做网站申请域名空间51外链代发网
  • 旅游网站策划书主流数据网站
  • 工业设计专业就业方向天津网站seo营销模板
  • 公司网站免费建站怎么样安卓在线视频嗅探app
  • 深圳商城网站建设报价单郴州建设工程集团招聘信息网站
  • 郑州经纬网络做网站吗建网站必须要服务器吗
  • 建设中的网站备案期间做什微信用什么小程序可以提取文字
  • 有哪些网站可以做家教校园二手网站的建设方案
  • 做pc端网站效果广州培训网站建设
  • 怎么做挣钱的网站建设通网站是筑龙网的吗
  • 网站建设公司公司建设厅安全证考试报名在哪个网站
  • 省级别网站建设方案网站开发和大数据开发区别
  • 青岛模板做网站制作网站需要哪些技术
  • 山东省建设厅招标网站首页安徽省美好乡村建设网站
  • 深圳网站建设公司排行榜鸿鑫建设集团有限公司网站
  • 给企业做网站如何定价娄底建设局网站
  • 网站开发就业培训佛山响应式网站
  • 股票做T网站网站 项目 需求
  • 代做动画毕业设计的网站wordpress 网站白屏
  • 株洲网站建设企业网站设置ico