迭代器和指针的区别

迭代器封装了“遍历容器”的方法。不同容器的遍历实现有差异,如数组只需要给定偏移即可遍历,可链表则需要一些“复杂”的跳转操作,由此可见,迭代器通过封装统一了遍历操作,降低了编程的复杂度(迭代器帮你做了)。

举个简单的例子,自定义找最大值的函数功能findMax,对于不同容器你必须得定义一个数组版和链表版的重载函数,继续定义不同容器,你不仅需要费神去思考该结构遍历操作细节,重载的形式更是多种多样。迭代器将各种容器的操作进行了抽象,隐去了操作细节,用户只需要根据抽象出来的操作完成任务。

具体的,他们之间的区别是:
(1) 迭代器是仿指针的类模板。像是指针操作符,->,*,++ --封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为:根据不同类型的数据结构来实现不同的++,–等操作;
(2)在设计模式中有一种模式叫迭代器模式。该模式提供不需要暴露某个容器的内部表现形式,完成遍历容器操作。STL算法中广泛使用迭代器参数。通过迭代器,容器和算法可以有机的粘合在一起,我们基本上不需要考虑底层的实现就可以完成一些通用算法。使用迭代器算法后需要注意失效问题
(3) 指针能指向函数,迭代器只能指向容器。

[1] https://blog.csdn.net/qq_42565910/article/details/89068025
[2] https://www.zhihu.com/question/54047747

猜你喜欢

转载自blog.csdn.net/weixin_39258979/article/details/114001426
今日推荐