STL:迭代器(iteratoes)概念


前言


迭代器(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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值