根据能力不同,迭代器被划分为五种不同的类型,STL 预先定义好的所有容器,均属于以下三种分类
向前迭代器
只能以累加操作符向前迭代 , forward_list 容器就是属于这一种,其他种类型比如 set map 等都至少是此类型的迭代器,但是在标准库中大都称为他们为双向迭代器
双向迭代器
顾名思义,可以使用双向进行:递增运算前进或者递减运算后退, list map set 等都属于此类迭代器
随机访问迭代器
他不但具备双向迭代器的所有属性,还具备随机访问的能力,准确的说他们提供了迭代器的算数运算法,你可以对迭代器增加或者减少一个偏移量来计算两个迭代器之间的距离,或者使用 > 或者 < 来操作符进行比价, vector deque array 提供的迭代器都是此类迭代器
除此之外,STL 还定义了两种类型的迭代器
输入型迭代器
向前迭代的同时,能够读取/处理 value , input stream 就是此类迭代器
输出型迭代器
向前迭代的同时能够涂写 value ,inserter 与 output stream 就是此类迭代器
了解了这些之后,在使用迭代器遍历的过程中,尽量不要使用随机访问迭代的特性来编写代码, 以下例子可以在任何迭代器中运行
for(auto pos=coll.begin(); pos!=coll.end;++pos){
}
再来看看使用随机访问迭代器
for(auto pos=coll.begin(); pos<coll.end;++pos){
}
在上面介绍过,只有随机访问迭代器才支持 operator > 或者 operator < ,那么此种迭代器的遍历释放就只支持 vector deque array 等少数容器,兼容性并不是非常好