这是我感觉总结的很好的一篇回答:
如果只讨论 STL container 类的 iterator,它们其实都是一种泛型指针。C风格指针是属于 iterator 的一种的。iterator 根据功能做了更细的划分,STL 中的 iterator 分成了五类。我觉得它们的区别:
在范围上,pointer 属于 iterator 的一种(random access iterator)
在功能上,iterator 有着比pointer 更细的划分并对应能力不同的功能(重载不同的运算符 )
在行为上,iterator 比 pointer更统一和良好的用法(更轻易使用 begin()、end()且不用担心越界)等
膜拜
指针与迭代器的差别:
迭代器:
(1):迭代器不是指针,而是类模板,表现的像指针,实际上他只是模拟了指针的一些功能,通过重载指针的一些操作符:->、、++、-- 等封装了指针。是一个”可遍历STL容器内全部或部分元素“的对象,本质是封装了原生指针,是指针概念的一种提升,提供了比指针更高级的行为,相当于一种智能指针,它可以根据不同的数据结构来实现不同的++,–等操作;
(2):迭代器返回的是对象的引用而不是对象的值,所以cout只能输出解引用()迭代器之后的值
(3):在设计模式中有一种模式叫迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器内部的表现形式情况下,使之能一次访问容器的各个元素,这种设计模式在STL中得到了广泛应用,是STL的关键所在。通过迭代器,可以使容器和算法有机粘合在一起,只要算法给予不同的迭代器,就可以对不同的容器进行相同的操作;
指针:
指针能指向函数而迭代器不行,迭代器只能指向容器;指针是迭代器的一种。指针只能指向某些特定的容器;迭代器是指针的抽象和泛化;所以,指针满足迭代器的所有要求;
因此,迭代器与指针是由很大差别的,虽然他们的表现行为相似,但本质是不同的!
指针是存放地址的变量,迭代器是类模板;
注意:迭代器在使用后就释放了,不能再继续使用,但指针可以;