迭代器-iterator
一、什么是迭代器?
- 迭代器(iterator):用来指向、遍历、修改容器元素的变量,类似指针。
- 可遍历STL容器内全部或部分元素的对象
- 指出容器中一个特定的位置
| 操作 | 效果 |
| * | 返回当前位置上的元素值。如果该元素有成员,可以通过迭代器以operatro->取用 |
| ++ | 将迭代器前进至下一元素 |
| ==和!= | 判断两个迭代器是否指向 |
| = | 为迭代器赋值(将所指元素的位置赋值过去) |
- 迭代器(iterator)函数
| 操作 | 效果 |
| begin() | 返回一个迭代器,指向第一个元素 |
| end() | 返回一个迭代器,指向最后一个元素之后 |
二、迭代器的分类
常用的迭代器按功能强弱分为:输入、输出、正向、双向、随机访问五种,这里只介绍常用的三种
不同容器的迭代器,其功能强弱有所不同。例如,排序算法需要通过随机访问迭代器访问容器中的元素,因此有的容器就不支持排序算法。
1、正向迭代器
- 假设p是一个正向迭代器,则p支持以下操作:++p, p++, *p.
- 此外,两个正向迭代器可以互相赋值,还可以用== 和 !=运算符进行比较。
2、双向迭代器
- 双向迭代器具有正向迭代器的全部功能。
- 双向迭代器p支持--p 和p--,使得p朝和++p相反的方向移动
3、随机访问迭代器
- 随机访问迭代器具有双向迭代器的全部功能。
- 随机访问迭代器p还支持以下操作:
- p+=i: 使得p往后移动i个元素
- p-=i: 使得p往前移动i个元素
- p+i: 返回p后面第i个元素的迭代器
- p-i:返回p前面第i个元素的迭代器
- p[i]:返回p后面第i个元素的引用
- 两个随机访问迭代器p1、p2还可以用<、>、<=、>=运算符进行比较。
- 表达式p2-p1表示迭代器p2所指向元素和迭代器p1所指向元素的序号差
| 容器 | 迭代器类别 |
| vector | 随机 |
| deque | 随机 |
| list | 双向 |
| set/multiset | 双向 |
| map/multimap | 双向 |
| stack | 不支持迭代器 |
| queue | 不支持迭代器 |
| priority_queue | 不支持迭代器 |
#include <bits/stdc++.h> using namespace std; int main(){ //复习:用指针来遍历数组元素。 // char s[] = "hello str"; // char *p ; //&s &s[0] // //p是指向字符数组的指针,相当于一个迭代器 ,*p是元素 // for(p=s;*p !='\0';p++){ // cout<<*p <<" "; // } int a[] = {10,20,30,40,50}; vector<int> v(a,a+5); //定义迭代器,命名为it vector<int>::iterator it; //迭代器指向vector<int>的首元素 //it = v.begin(); // (*it)++; // cout<<*it<<" "<<v[0]<<endl; //利用迭代器来遍历v中的元素 for(it = v.begin();it != v.end();it++){ cout<<*it<<" "; } cout<<endl; //利用迭代器反向遍历vector vector<int>::reverse_iterator rit; for(rit = v.rbegin();rit!=v.rend();rit++){ cout<<*rit<<" "; } return 0; }
浙公网安备 33010602011771号