文章目录
前言
迭代器(Iterator)是一种用于访问容器(如数组、向量、列表等)中元素的通用机制。迭代器提供了一种方法,能够按顺序遍历容器中的元素,同时保持容器与迭代器之间的解耦,这意味着迭代器的设计不依赖于容器的内部结构。
本文概念定义主要参考《STL源码剖析》,以下将会梳理迭代器相关的概念,以及用list中的迭代器的模拟实现来大致阐述其作用。
迭代器是一种抽象的设计概念,现实编程语言中并没有直接对应于这个概念的实物
一、迭代器设计思维——STL关键所在
1.1 迭代器存在原因解释
不论是泛型思维或者STL的运用,迭代器(iterators)都扮演着重要的角色。STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以一贴胶着剂将它们撮合在一起。容器和算法的泛型化,从技术角度来看并不困难,c++的class template和function template可分别达成目标。可是如何设计两者之间的良好胶着剂,才是大难题。
以下是容器,算法,迭代器(iterators,扮演粘胶角色)的合作展示。以算法find() 为例,它接受两个迭代器和一个“搜寻目标”
//摘自 SGI <stl_algo.h>
template<class InputIterator,class T>
InputIterator find(InputIterator first,
InputIterator last,
const T& value){
while(first!=last && *first!=value)
++first;
return first;
}
1.2 迭代器是一种smart pointer
迭代器是一种行为类似指针的对象,而指针的各种行为中最常见最重要的是内容提领(dereference)和成员访问(member access),因此,迭代器最重要的编程工作就是对operator* 和operator-> 进行重载(overloading)工作。
举例:当我们定义一个链表类时里面定义了三个类型,我们如果想访问数据_data时而不是它的_next和__prev就不能直接像向量那样直接解引用操作
struct List_Node {
//存储节点及构造函数的定义
List_Node(const T& data=T())
:_data(data)
,_next(