前言
要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。
迭代器按照定义方式分成以下四种:
- 正向迭代器,定义方法如下:
容器类名::iterator 迭代器名;
- 常量正向迭代器,定义方法如下:
容器类名::const_iterator 迭代器名;
- 反向迭代器,定义方法如下:
容器类名::reverse_iterator 迭代器名;
- 常量反向迭代器,定义方法如下:
容器类名::const_reverse_iterator 迭代器名;
迭代器的用法
迭代器不使用取地址符(要与指针区分开),有迭代器的类型同时拥有返回迭代器的成员,比如begin
和end
成员。
begin
成员:负责返回指向第一个元素(或第一个字符)的迭代器end
成员:负责返回指向容器(或string
对象)“尾元素的下一位置(one past the end)”的迭代器,即:该迭代器指示的是容器的一个本不存在的“尾后(off the end)”元素。所以又名:尾后迭代器(off-the-end iterator)简称尾迭代器(end iterator)(无实际意义,只是个标识而已)。
如果容器为空,则begin
和end
返回的是同一个迭代器,都是尾后迭代器。
迭代器的常用操作如下:
代码 | 操作 |
---|---|
*iter | 反回迭代器iter 所指元素 |
iter->mem | 解析引用iter 并获取该元素名为mem 的成员,等价于(*iter).mem |
iter++ 或++iter | 令iter 指示容器的下一个元素 |
iter-- 或--iter | 令iter 指示容器的上一个元素 |
iter1==iter2 | 判断两个迭代器是否相等,如果两个迭代器指示的是同一个元素,或它们是同一个容器的尾后迭代器,则相等 |
不同容器的迭代器的功能
容器 | 迭代器功能 |
---|---|
vector | 随机访问 |
deque | 随机访问 |
list | 双向 |
set 和multiset | 双向 |
map 和multimap | 双向 |
stack | 不支持迭代器 |
queue | 不支持迭代器 |
priority_queue | 不支持迭代器 |