迭代器
迭代器(Iterator)模式:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
迭代器模式由以下角色组成:
1) 迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。
2) 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。
3) 容器角色(Container):容器角色负责提供创建具体迭代器角色的接口。
4) 具体容器角色(Concrete Container):具体容器角色实现创建具体迭代器角色的接口——这个具体迭代器角色于该容器的结构相关。
迭代器模式的类图如下:
pecker_framework/data数据结构部分目前使用到的迭代器主要有两类,线性迭代器和树结构迭代器。
线性迭代器,主要包含动态数组用的数组迭代器(代码在pecker_array_iterator.h中),线性链表用的链表迭代器。
树结构迭代器,提供中序遍历迭代器,后续遍历迭代器两种,主要包含AVL树专用迭代器(代码在pecker_avl_tree.h中),通用二叉搜索树(节点中可不含父节点)的迭代器(代码在pecker_bst_iterator.h中),以及通用三叉搜索树的中序遍历迭代器(代码在pecker_bst_iterator.h中)。
在目前版本中迭代器区别于 STL 的迭代器在于, STL 的迭代器大多为编译时迭代器,而 pecker_framework/data 的迭代器以运行时迭代器为主,支持一个容器对象使用多种迭代遍历方式,可以自行实现自定义迭代,并运行时选择性加载。