C++ 迭代器iterator 小结


之前对C++中的iterator一直只有比较笼统的认识,由python中的迭代器知识所拟出来的浅薄印象,今天重新整理一遍,对研究有关vector等可迭代容器的题有所帮助。
参考文章: C语言中文网
Ceeji博客

iterator概念和定义

除了在其它语言中司空见惯的下标法访问容器元素之外,C++ 语言提供了一种全新的方法——迭代器(iterator)来访问容器的元素。迭代器其实类似于引用,指向容器中某一元素。迭代器助于统一各类容器的随机访问接口,因为很多容器无法用下标访问(vector[i])。
要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。

按照功能的定义:

正向迭代器:容器类名::iterator 迭代器名;
常量正向迭代器:容器类名::const_iterator 迭代器名;(不能修改其指向的元素,可以改变指向
反向迭代器:容器类名::reverse_iterator 迭代器名;(++操作向前读取)
反向常量迭代器:容器类名::const_reverse_iterator 迭代器名;(顾名思义)
双向迭代器:组合正向迭代器和逆向迭代器的功能,支持多遍算法
随机访问迭代器:组合双向迭代器的功能与直接访问容器中任何元素的功能,即可向前向后跳过任意个元素。支持it1 < it2,即判断p1 在p2之前(同<=;>;>=)

遍历vector代码示例
vector<int> v; //已经初始化
vector<int>::iterator i;  //定义正向迭代器
i = v.begin();
i += 5;
cout << *i << endl; //输出第五个元素
for (i = v.begin(); i != v.end(); ++i) {  //用迭代器遍历容器(注:++i比i++更快)
    cout << *i << " "; //输出元素
    *i *= 2;  //每个元素变为原来的2倍
}

容器与其迭代器功能

vector: 随机访问
deque: 随机访问
list: 双向
set/multiset: 双向
map/multimap: 双向
stack: 不支持迭代器
queue: 不支持迭代器
priority_queue: 不支持迭代器

迭代器的辅助函数

advance(p,n):使迭代器p向前或向后移动n个元素

distance(p,q):计算两个迭代器之间的距离,即迭代器p经过多少次++操作后和迭代器q相等,如果调用时p已经指向q的后面,则该函数会陷入死循环

iter_swap(p,q):用于交换两个迭代器p,q指向的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值