以deque为例详细解析容器、迭代器

C++是令人着迷的一门编程语言,容器和迭代器是是C++的重要组分。容器和迭代器算是比较容易理解,容器是静态的,是负责存储数据的,比如数组,链表,二叉树等,迭代器是和容器密切相关的,是针对特定容器设计出来的数据访问器。二者紧密相连,为算法等构建提供基础设施建设。下面就从源码实现角度,详细解析容器和迭代器的关系,分析对象为STL中的deque(双端队列)。

从源码角度考察容器和迭代器之间的关系。

容器源码:

template<class T,class Alloc=alloc,size_t BufSize=0>
class deque{
public:
        .....
protected:
        iterator start;
        iterator finish;
public:
iterator begin(){return start;}
iterator end(){return finish;}

 }
迭代器源码:

template<class T,class Ref,class Ptr,size_t BufSiz>
struct __deque_iterator
{
T *cur;
T *first;
T *last;
}

首先要明白的一点是提供容器的同时必须要提供迭代器。看一下二者的“相互渗入”吧,首先对于容器来说,会提供两个迭代器(也可以认为是两个指针)分别指向容器的头和尾。

迭代器的结构中,会有三个容器所容数据类型的指针,cur、first以及last,这三个指针将来是要深入容器中数据结构内部的。好了,二者的结合点,可以用这样理解:容器和迭代器两人对彼此都很了解,因为出自同一人之手,容器为迭代器提供了一个头尾指针,迭代器内相应的指针,能够在容器中自由游走。下面先看看,迭代器是怎样在容器中自由游走的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值