[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

posted @ 2022-02-20 15:34  Cheung-10  阅读(7)  评论(0)    收藏  举报