前言
本篇继续学习C++ STL的内容,迭代器。
迭代器
上篇提到,迭代器是一种用于访问和遍历容器内元素的数据类型,是指针的泛化。迭代器使得编程时,可以用同一种方法处理不同的容器。
定义迭代器
容器有自己的迭代器类型,创建迭代器的方法是
容器类型<数据类型>::迭代器类 迭代器名
迭代器类可分为:
iterator
正向迭代器const_iterator
常量正向迭代器reverse_iterator
反向迭代器const_reverse_iterator
常量反向迭代器
正向迭代器的++
操作是指向容器的后一个元素;反向迭代器的++
操作时指向容器的前一个元素。
const_iterator
可以指向const
和非const
容器,但指向的元素值是不能通过该迭代器修改的(类似常量指针)。
被声明为const
的迭代器const xxx<xxx>::iterator
与const_iterator
不同,意思是迭代器的指向不能改变(类似指针常量)。
注意:反向迭代器可通过正向迭代器构造,也可通过rbegin(),rend()
函数获得。
注意:反向迭代器指向的首元素是容器的最后一个元素,也就是说rbegin()
指向最后一个元素;rend()
指向第一个元素前一个元素的位置。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
vector<int> vec(5);
vector<int>::reverse_iterator iter(vec.rend());
iter--;
*iter = 5;
for(int i: vec)
cout << i << ' '; // 5 0 0 0 0
cout << iter[0]; // 5
return 1;
}
迭代器功能
所有迭代器都能够:
++
自增,包括前置和后置自增
输入迭代器增加了:
*
迭代器取值(右值)=
迭代器赋值==,!=
相等与不等
输出迭代器增加了:
*
迭代器取值(左值)=
迭代器赋值
正向迭代器:
- 包括上面的所有功能
双向迭代器在正向基础上增加了:
--
自减,包括前置和后置
随机迭代器在双向基础上增加了:
+,-,+=,-=
各种迭代器移动操作[]
取值,类似指针[]>,<,>=,<=
迭代器比较