系列文章
http://t.csdnimg.cn/u80hL
目录
- 系列文章
- @[TOC](目录)
- 一、定义
- 二、迭代器——六大组件之一
- 封装的作用
- 封装要注意的点
- 迭代器封装设计很巧妙
- 迭代器适配器
目录
- 系列文章
- @[TOC](目录)
- 一、定义
- 二、迭代器——六大组件之一
- 封装的作用
- 封装要注意的点
- 迭代器封装设计很巧妙
- 迭代器适配器
一、定义
访问容器有时使用原生指针,有时迭代器为了避免复杂化统一使用迭代器。
容器与算法不分离,容器与算法是伴随相生的,算法一般是根据容器的性质而定的;
- 容器
- 结构
- 数组
- 链表
- 树型
- 算法
二、迭代器——六大组件之一
封装的作用
- 封装屏蔽底层实现的复杂细节;
- 复用过去已经实现的;
- 反向迭代器用正向迭代器封装实现,反向迭代器用正向迭代器封装实现;
- 反向迭代器用正向迭代器实例化;
封装要注意的点
- 实现封装时,我们只要确保输入输出正确即可;
- 实现封装后我们可以使用统一简单的方式访问容器;
迭代器封装设计很巧妙
- 物理层面,指针的大小是四个字节,迭代器(地址)大小也是四个字节,物理层面与原生指针一样大;
- 迭代器的operator()++与指针解引用后++写法一样,底层原理不一样;
迭代器适配器
不同容器的迭代器有功能上的重叠,因此我们可以写一个迭代器适配器去套用以提升编码效率;
反向迭代器可以被正向迭代器实现是因为他们的解引用方式是一样的;
- 迭代器可以适配的前提是功能存在重叠;
- 具有常性的自定义类型对象可以调用非const函数,这是C++为自定义类型开的例外。(这里非const对象调用了非const成员函数,这在语法上是错误的);
- 我们实现vector的反向迭代器时,有一个排序错位,我们在解引用阶段把迭代器一开始的排序错位修正了;