学科分类
目录
C++基础

迭代器概述

理解迭代器对于理解STL框架并掌握STL的使用至关重要,迭代器是泛化的指针,STL算法利用迭代器对容器中的元素序列进行操作,迭代器提供了访问容器中每个元素的方法。虽然指针也是一种迭代器,但迭代器却不仅仅是指针。指针可以指向内存中的一个地址,通过这个地址可以操作相应的内存单元,而迭代器更为抽象,它可以指向容器中的一个位置,我们不必关心这个位置对应的真正的物理地址,只需要通过迭代器访问这个位置的元素即可。

在STL中,容器是封装起来的类模板,其内部结构无从知晓,只能通过容器接口来使用容器,而STL中的算法又是通用的函数模板,并不专门针对某一个容器。算法要适用于多种容器,而每一种容器中存放的元素又可以是任何类型,显然,无法用普通的指针来充当中介,这时就必须使用更为抽象的“指针”,就是迭代器。

就像声明指针时要说明其指向的元素一样,STL中每个容器类模板中,都定义了一组对应的迭代器类,使用迭代器,算法函数可以访问容器中指定位置的元素,而无须关心元素的具体类型。

迭代器本身是一个对象,这个对象可以遍历STL容器内部全部的对象,它能够反复的对STL容器内容进行访问。迭代器所提供的基本操作如下所示:

● 获取当前被指向的元素,用“*”或“->”表示。

● 指向下一个元素,迭代器的增量使用运算符“++”。

● 相等,使用运算符“==”。

● 除了输出迭代器外,其他迭代器可以获得任意两个迭代器之间的位置(使用distance函数)。

● 随机存取迭代器可以通过加减整数,取得相对地址(其他迭代器不可以)。

STL提供了五种基本的迭代器:输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机迭代器。这五种迭代器的关系如图1所示。

图1 五种迭代器之间的关系

后面的迭代器具有前面迭代器的所有功能,例如,前向迭代器具有输入、输出迭代器的所有功能,而双向迭代器又具有前向迭代器的所有功能。接下来我们就分别学习这五种迭代器。

点击此处
隐藏目录