一、定义
迭代器是面向对象版本的指针,它提供了访问容器和序列中每个元素的方法,可以利用迭代器对存储在容器中的元素进行遍历。
二、分类
1、输入(input):读取数据
2、输出(output):写入数据
3、前向(forward):读/写数据,并可对序列进行单向的遍历。
4、双向(bidirectional):读/写数据,并可对序列进行双向的遍历。
5、访问随机(random access):读/写数据,并可对序列进行双向的遍历,还能在序列中的任意两个位置上进行跳转。
三、使用
迭代器在头文件iterator中声明。
vector和deque容器支持随机访问,list、set、multiset、map和multimap容器支持双向访问。
预定义迭代器
预定义迭代器 | ++操作的方向 | 功能 |
---|---|---|
iterator | 向前 | 读/写 |
const_iterator | 向前 | 读 |
reverse_iterator | 向后 | 读/写 |
const_reverse_iterator | 向后 | 读 |
举个栗子:
#include <iostream>
#include <list>
#include <iterator>
using namespace std;
int main()
{
list<int> nums; // 双向链表,长度为0
list<int>::const_iterator p; // 整形双向链表的顺序迭代子
list<int>::const_reverse_iterator q; // 整形双向链表的逆序迭代子
nums.insert(nums.begin(), 1); // 设置初始值
nums.insert(nums.begin(), 10);
nums.insert(nums.begin(), 100);
cout << "链表中的所有元素为:" << endl;
for (p = nums.begin(); p != nums.end(); p++)
cout << *p << " ";
cout << endl;
cout << "逆序打印:" << endl;
q = nums.rbegin(); // 逆序迭代
while (q != nums.rend()) // 不指向第一个元素
{
cout << *q << " ";
q++;
}
return 0;
}
运行结果:
链表中的所有元素为:
100 10 1
逆序打印:
1 10 100