STL源码剖析中,空间配置器和迭代器属于比较晦涩难懂的两章,这里学习了STL迭代器后也尝试自己写一个迭代器,实现单链表的迭代器,实现不难,可以说是一个玩具而已,但是能够帮助我们理解STL迭代器的基本原理。
1.节点Node和单链表的定义LinkList
//声明
template<typename T>
class ListIterator;
template<typename T>
class LinkList;
//链表节点
template<typename T>
class Node{
friend class LinkList<T>;
friend class ListIterator<T>;
template<typename T1>
friend ostream& operator<<(ostream &out,const LinkList<T1>& list);
private:
//私有构造函数,只能友员类可以实例化该类
Node(const T& datavalue):data(datavalue),next(NULL){};
T data;
Node* next;
};
//带头结点的单链表
template<typename T>
class LinkList{
template<typename T1>
friend ostream& operator<<(ostream &out,const LinkList<T1>& list);
friend class ListIterator<T>;
public:
LinkList();
~LinkList();
//链表操作
void Insert(const T& data, int index);
bool IsEmpty() const;
private:
Node<T>* first; //带头节点的单链表
};
节点的定义成上述形式,主要就是为了实现oo思想中的封装。单链表的声明中省去来了很多成员函数,因为这里只是为了实现迭代器思想。
2.单链表迭代器的声明ListIterator
//链表迭代器