迭代器
Iterator
(迭代器)模式⼜称
Cursor
(游标)模式,⽤于提供⼀种⽅法
顺序访问⼀个聚合对象中各个元素, ⽽⼜不需暴露该对象的内部表示。
或者这样说可能更容易理解:Iterator
模式是运⽤于聚合对象的⼀种模式,通过运⽤该模式,使得我们可以在不知道对象内部表示的情况下,按
照⼀定顺序(由iterator提供的⽅法)访问聚合对象中的各个元素。
由于Iterator
模式的以上特性:与聚合对象耦合,在⼀定程度上限制了它的⼴泛运⽤,⼀般仅⽤于底层聚合⽀持类,如STL
的
list
、
vector
、
stack
等容器类及
ostream_iterator
等扩展
iterator
。
迭代器和指针的区别
迭代器不是指针,是类模板
,表现的像指针。他只是模拟了指针的⼀些功能,通过重载了指针的⼀些操作符,
->
、 *、
++
、
--
等。迭代器封装了指针,
是⼀个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原⽣指针
,是指针概念的⼀种提升(lift
),提供了⽐指针更⾼级的⾏为,相当于⼀种智能指针,他可以根据不同类型的数据结构来实现不同的++
,
--
等操作。迭代器返回的是对象引⽤⽽不是对象的值,所以cout
只能输出迭代器使⽤
*
取值后的值⽽不能直接输出其⾃身。
迭代器产⽣原因
Iterator
类的访问⽅式就是把不同集合类的访问逻辑抽象出来,
使得不⽤暴露集合内部的结构⽽达到循环遍历集合的效果