STL 迭代器

来源:互联网 发布:明道软件价格 编辑:程序博客网 时间:2024/06/02 05:28

一,迭代器的作用

STL的中心思想在于:将容器和算法分开,彼此独立设计,最后在使用胶水把他们撮合在一起。容器和算法的泛型化,从技术角度来看并不困难,C++中的类模板与函数模板可以分别实现这些功能。如何能设计出两者之间的胶水才是最大的难题,而迭代器就是他们之间的胶水。在C++中,完成通用程序的工具是模板,模板使得算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。对于STL提供的find()算法来说,泛型编程旨在使用同一个find函数来处理数组、链表或其他容器类型。即函数不仅独立于容器中存储的数据类型,而且独立于容器本身的数据结构。模板提供了存储在容器中的数据类型的通用表示,因此还需要遍历容器中的值的通用表示,迭代器正是这样的通用表示。


二,迭代器

迭代器是一种行为类似于指针的对象,指针最常用的操作是解除引用与成员访问,因此迭代器的最重要的工作就是对operator*与operator->进行重载。迭代器提供了一种方法可以顺序访问容器中的各个元素,而又不暴露该容器的内部实现,为遍历不同的容器提供了一个统一的接口。


三,迭代器的类型

1,输入迭代器

输入是从"程序"的角度来讲的,即来自容器的信息被视为输入。输入迭代器可以用来读取容器中的信息,这是通过支持++运算符来实现的。输入迭代器并不能保证第二次遍历容器时,顺序不变。输入迭代器被递增之后,也不能保证其之前的值仍然可以被解除引用。因此,输入迭代器支持的功能有:解除引用读取、++i与i++。


2,输出迭代器

输出是指将程序的数据传递给容器,因此程序的输出就是容器的输入。输出迭代器与输入迭代器类似,只是解除引用让程序能修改容器的值,但是不能读取容器的值。因此,输出迭代器支持的功能有:解除引用写入,++i与i++。


3,正向迭代器

正向迭代器既能读取容器中的数据,也能修改容器中的数据,但是正向迭代器只能使用++运算符来遍历容器。然而与输入、输出迭代器不同的是,它总是按照相同的顺序遍历一系列的值。将正向迭代器递增后,仍然可以对前面的迭代器值解除引用。因此,正向迭代器支持的功能有:解除引用读取、解除引用写入、i++与++i、固定和可重复排序。


4,双向迭代器

双向迭代器拥有正向迭代器的所有功能,同时支持--i与i--运算。


5,随机访问迭代器

随机访问迭代器拥有双向迭代器的所有功能,同时添加了支持随机访问的操作,例如:i + n、i - n、i += n、i -= n等操作。