迭代器的使用要加上头文件
# include<iterator>
1、迭代器之按照定义划分
输入迭代器(InputIterator)
:以内存为标准,输入就是从容器读取元素,向内存输入数据。容器中读取元素,输入迭代器只能一次一个元素向前移动即i++,直至容器末尾,要重读必须从头开始输出迭代器OutputIterator
:向容器中写入元素,输入迭代器只能一次一个元素的向前移动,要重写需要从头开始。正向迭代器ForwardIterator
:组合输入,输出迭代器的功能,保留在容器中的信息,重新读写不必从头开始双向迭代器Bidirectional Iterator
:从容器序列末尾到容器序列开头,只能i++移动。随机访问迭代器RandomAccessIterator
:可以直接访问到容器中的任意元素,可以向前向后跳转任意个元素。
标准库定义迭代子的层次结构,按这个层次,从上到下,功能越来越强:
STL容器支持的迭代器类别:
容器 | 迭代器类型 |
---|---|
vector | 随机访问 |
deque | 随机访问 |
list | 双向 |
set | 双向 |
multiset | 双向 |
map | 双向 |
multimap | 双向 |
stack | 不支持迭代器 |
queue | 不支持 |
priority_queuqe | 不支持 |
2、迭代器之按常性划分
- 普通迭代器iterator:只能指向(迭代)普通容器对象
- 常量迭代器const_iterator:指向常容器对象
【举个栗子】
const vector<int> vec;//常容器对象
std::vector<int>* iterator it=vec.begin();//错误,有修改的风险
std::vector<int>::const_iterator it=vec.begin();//正确
3、迭代器之按功能划分
3.1反转型(反向型)迭代器
1、普通反转迭代器:reverse_iterator
功能:反向打印容器中的元素
,虽然可以使用普通迭代器从后到前遍历打印,但是会存在问题,所以系统提供了一个反转迭代器:
template<typename Container>
void show(Container& con)
{
typename Container::reverse_iterator it = con.rbegin();//指向后面,反向打印
for (; it != con.