温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何理解c++下迭代器

发布时间:2021-12-22 19:48:30 来源:亿速云 阅读:152 作者:柒染 栏目:开发技术

这篇文章给大家介绍如何理解c++下迭代器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1. 迭代器介绍

本章并不研究不同类型的迭代器,只总结常见迭代器的使用和误区。

定义:迭代器(iterator)有时又称光标(cursor),是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍历的接口,设计人员无需关心容器对象的内存分配的实现细节。

背景:指针可以用来遍历存储空间连续的数据结构,但是对于非连续存储的数据结构,就需要一个行为类似于指针的类,来对非连续数据结构进行遍历。正如定义里标红所说,迭代器可以遍历非连续的数据结构。

在C++中,我们更倾向于使用迭代器而不是使用下标操作,因为标准库为每一种标准容器(如vector)定义了一种迭代器类型,而只有少数容器(如vector)支持下标操作访问容器元素。

2. 初始化

每种容器都定义了自己的迭代器类型,可以使用auto自动声明迭代器的类型,也可以显示的将迭代器类型写出来:

//只有顺序容器(不包括array)的构造函数才接受大小参数
vector<int> vec(num, val);
vector<int>::iterator it = vec.begin();
//auto it = vec.begin();

3. 常用操作

下面表格列出了迭代器的常用操作:

*iter解引用,返回迭代器指向的元素的引用
iter->member等效于(*iter).member
++iter, iter++iter + 1,指向容器的下一个元素
–iter, iter–同上
iter1 == iter2比较两个迭代器是否相等
iter1 != iter2

在C++定义的容器类型中,只有vector,string和queue容器提供迭代器算术运算和除!=和==之外的关系运算:

iter + n, iter - n迭代器+或-一个常数,必须指向容器内或尾后元素(end())
iter1 += iter2同上
iter1 -= iter2同上
iter1 - iter2获得两个迭代器之间的距离
>, >=, <, <=元素靠后的迭代器大于靠前的迭代器

注意:

迭代器并不是所有都可以进行加减常数。 能进行算数运算的迭代器只有随机访问迭代器。要求容器元素存储在连续空间内;即vector、string、deque的迭代器是有加减法的;但是list、forward_list、map、set的迭代器是没有加减法的,它们仅支持++iter、–iter这些操作。 it++和++it的区别

在STL中的容器使用迭代器进行遍历时,it++与++it的效果是相同的,遍历的次数也是相同的,但是在STL中效率却不同:

++it返回的是引用;it++返回的是临时对象;–it同理。

原因:it++每次都要返回一个无用的临时对象,所以每一次遍历,你都进行了一次创建并销毁对象的操作。(leetcode小本本记好了!)

关于如何理解c++下迭代器就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI