[C++] 迭代器
迭代器
C++中访问顺序和关联容器元素的中介变量。作用类似于指针。
1. 迭代器可以分为四类:
1)正向迭代器 iterator
2)正向常量迭代器 const_iterator
3)反向迭代器 recerse_iterator
4)常量反向迭代器 const_reverse_iterator
2. 迭代器常用的操作:
1)移动迭代器:
it++,对正向迭代器,会指向容器后一个元素;对反向迭代器则会指向容器前一个元素。
it--,对正向迭代器,会指向容器前一个元素;对反向迭代器则会指向容器后一个元素。
2)取得元素:
*it,取得迭代器指向的元素,可以进行修改。
对某些特殊容器(关联容器,如map),获得的元素是一个pair。
以map为例,如果想获得具体的key或者value,语法为 it->first 和 it->second (或者 (*it).first 和 (*it).second )。
3)取得第一个迭代器,遍历容器。
map<int,int> mp;
mp[0]=1;
mp[1]=2;
mp[2]=3;
// 正向迭代
for(auto it=mp.begin();it!=mp.end();it++){
cout<<it->first<<" "<<it->second<<endl;
}
// 反向迭代
for(auto it=mp.rbegin();it!=mp.rend();it++){
cout<<it->first<<" "<<it->second<<endl;
}
4)作为STL模板公共函数的参数
如vector排序的sort,插入函数insert,删除元素函数erase等。
注意:erase函数调用后,原本的迭代器失效,函数会返回新的迭代器,需要接着使用新迭代器。
3. 迭代器功能分类
不同容器的迭代器功能有强弱区别。可被分为输入、输出、正向、双向、随机访问物种。
1)正向迭代器,支持++、*p、迭代器赋值、比较运算(==和!=)操作。
2)双向迭代器,除正向迭代器已有的功能以外,还支持 -- 操作。
3)随机迭代器,除双向迭代器已有的功能以外,还支持 + 和 - 等操作来获取前后第n个迭代器。此外还支持大小比较(< 和 >等)。迭代器相减会得到间隔值(int类型)
| 容器 | 迭代器功能 |
|---|---|
| vector | 随机访问 |
| deque | 随机访问 |
| list | 双向 |
| set / multiset | 双向 |
| map / multimap | 双向 |
| stack | 不支持迭代器 |
| queue | 不支持迭代器 |
| priority_queue | 不支持迭代器 |
4. 自定义迭代器
STL提供了迭代器模板,可以给自己定义的类(或已有的类)进行迭代器实现。
需要重载一些自己想要的操作符函数。
http://c.biancheng.net/view/471.html
5. 迭代器实现
不同的容器实现迭代器模板中的一部分函数,采用tag区分迭代器实际的类型(也就是其功能强弱)。
https://blog.csdn.net/lpstudy/article/details/80281769
浙公网安备 33010602011771号