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