除了上面的两种迭代器之外,头文件iterator中还有其他一些专用的预定义迭代器类型。
其他有用的迭代器类型
reverse_iterator
对reverse_iterator执行递增操作,它将递减,然后对反转指针必须进行一种补偿,比如说对于正规指针有有一个解引操作,那么将得到对应的值,但是对于反转指针,起始是超尾迭代器,因此,对于解引来讲,实际上是先对指针进行递减,然后再解引。
vector类中有一种反转指针,我们可以不声明指针直接使用(rbegin()rend()):
![](https://img-blog.csdnimg.cn/0085d5f75eba400f95aac10a48ceaa3e.png)
插入迭代器
insert_iterator back_insert_iterator front_insert_iterator
这是三种插入迭代器,前面说过,可以使用copy()方法把一个容器内的值复制到另一个容器中去,但是却会覆盖原有的值,并且需要程序员自己保证目标容器具有足够的空间,可以用插入迭代器来解决这个问题。插入内容不仅不会覆盖原有内容,还会自己分配空间。insert_iterator迭代器插入指定位置的前面,back_insert_iterator插入容器尾,front_insert_iterator插入容器前端。
但是,back_insert_iterator只能用于允许在末尾快速插入的容器(快速插入是一个时间固定的算法)vector类满足。front_insert_iterator只能用于允许在前端快速插入的容器,vector类不满足,但是queue类满足。insert_iterator没有限制,在都可以使用的情况下,使用前两者速度会更快。
这些迭代器将容器类型作为模板参数,容器标识符作为构造函数参数:
back_insert_iterator<vector<int>>it(arr);
前两个迭代器都可以这样声明,对于insert_iterator迭代器还需要第二个构造函数参数用来指定插入的位置。
![](https://img-blog.csdnimg.cn/280eaa0ee2b4460c950283dc48ec2ebb.png)