首先介绍什么是迭代器:
迭代器是一种设计模式,设计一种结构依次序去遍历容器中的数据,而又无需暴露容器的底层设计细节,在我看来,迭代器的出现最重要的目的就是为了简单方便;同一种方式可以遍历不同的容器,不管底层结构是是顺序表,链表还是树。虽然使用方式相同,但是不同的容器中迭代器的实现方式是不同的,本文介绍红黑树的迭代器的实现方式。
迭代器的本质:
本质上是指针或者对指针的封装。
如何设计容器中的迭代器:
首先要明白容器的底层数据结构,按照什么规则进行遍历,其实使用一个类进行迭代器的封装,通过取别名的方式对不同容器中迭代器的进行取名,名字取统一“iterator”。
二叉树的结构:
enum Color{red,black};
template<class T>
struct RBTreeNode
{
RBTreeNode(const T& x=T(),Color c=red)
:left(nullptr)
,right(nullptr)
,parent(nullptr)
,data(x)
,color(c)
{
}
RBTreeNode<T>* left;
RBTreeNode<T>* right;
RBTreeNode<T>* parent;
T data;
Color color;
};
下面介绍红黑树的迭代器:
template<class T>
struct RBTreeIterator {
public:
typedef RBTreeNode<T> Node;
typedef RBTreeIterator<T> Self;
RBTreeI