内容发布更新时间 : 2024/11/19 19:36:45星期一 下面是文章的全部内容请认真阅读。
http://www.5itjob.com
迭代器
【ITjob课程资料】
迭代器
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。标准库为每一种标准容器(包括 vector等)定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现代 C++程序更倾向于使用迭代器而不是使用下标操作访问容器元素,即使对支持下标操作的 vector 类型也是这样。
迭代器提供一些基本操作符:*、++、==、!=、=。这些操作和C/C++“操作array元素”时的指针接口一致。不同之处在于,迭代器是个所谓的智能指针,具有遍历复杂数据结构的能力。其下层运行机制取决于其所遍历的数据结构。因此,每一种容器类型都必须提供自己的迭代器。事实上每一种容器都将其迭代器以嵌套类的方式定义于内部。因此各种迭代器的接口相同,类型却不同。这直接导出了泛型程序设计的概念:所有操作行为都使用相同接口,虽然它们的类型不同。
iterator的用法可以被统一,但不同的底层容器实现其iterator的原理是不一样的。例如iterator++你可以理解为移动到容器的下一个元素,如果底层如果是数组,把索引值加一就行;如果底层是链表,就得执行类似于m_pCurrent =m_pCurrent-> pNext;的操作。因此每种容器都有自己的iterator实现方法。
iterator的常用方法有: iterator++ 移到下个元素; iterator-- 移到上个元素;
*iterator 访问iterator所指元素的值; < > == != iterator之间的比较;
iterator1+iterator2 iterator之间的加法运算,类似于指针加法;
迭代器是种类型,在程序中使用的是其对象。从迭代器的层面上看,对所有类型容器元素的访问应该是等价的,因此,迭代器对象应具备以下功能:
(1) 间接访问(*p),在迭代器类中必须对一元*操作符定义。
(2) 迭代器对象之间的赋值,如p=q,在迭代器类中必须对赋值操作符定义。
(3) 迭代器对象间的比较,比较两个迭代器是否相等,因此,在迭代器类内必须对关系运算符==和!=进行定义,原则上讲,不需要对迭代器进行大小比较(<、>)等,就像比较指针实际上是比较其中存储的地址大小一样,没有意义。
(4) 能使用迭代器遍历容器中所有的元素,在本章已给出的示例代码中已经大量应用了诸如“p++”之类的操作,因此,在迭代器类必须对前缀增1和后缀增1进行定义。
在7.2节中,我们在例7.1中我们定义并使用了vector
http://www.5itjob.com
的迭代器;在例7.7中定义并使用了multiset
相关资料与视频请访问ITjob就业培训网