什么是迭代器?
An iterator is any object that, pointing to some element in a range of elements (such as an array or a container), has the ability to iterate through the elements of that range using a set of operators (with at least the increment (++) and dereference (*) operators).
那么迭代器有什么用呢?,在之前的文章中,实现了单双链表的基本功能。使其可以以一个个的节点来分布存储元素,并有一系列的相关操作。但我们定义一个数据结构,就是定义一系列数据的存储类型并合理的使用它们。那么在定义完成之后,开始使用自定义的数据结构时,我们发现当我们需要遍历访问自定义的数据结构时我只能通过下标运算符来访问,而且对于不同的容器我都需要重载[]
运算符,那么能不能定义一种类型可以遍历访问所有容器的类型呢?
——答案是有,那就是定义迭代器。
iterator类实现前的分析:
首先对iterator类的设计进行分析:
-
数据成员的类型与数据成员:
根据迭代器的定义,至少实现的功能是*
与++
这两个运算符,其中使用对迭代器对象使用*
运算符可以获取容器当前的值。那么根据这样的情况来看迭代器的数据类型应该为Node<T>*
,需要定义此类型的数据成员。 -
构造函数:
构造函数的目的是初始化类中的数据成员,所以要使用构造函数指明 -
成员函数与运算符重载:
需要重载++
与*
运算符,实现迭代器的基本核心功能。按照语义,重载运算符的函数返回类型必须是迭代器类型。
iterator类的实现:
- 数据成员的定义:
template<typename T>
class iterator
{
private:
Node<T>* node;
//other codes
}
因为迭代器也是一个指向Node类型的指针,所以把iterator类中声明一个Node<T>
的数据成员。
- 构造函数:
iterator