STL中的迭代器大家来讨论一下!

Tonyfengliang 2003-08-22 09:32:38
在看C++STL,迭代器看的不是很懂。有很多种迭代器。用VC种的POSITION的迭代器的时候,就是把他作为一个数组的指针理解的。在stl种怎么有这么多种迭代器啊。我只用考虑什么容器用那种迭代器就可以了吗?
大家都是怎么理解和运用迭代器的??
...全文
167 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
nirvana_li 2003-10-16
  • 打赏
  • 举报
回复
::D
iterators(迭代器):应用於容器与演算法身上的一种泛型指标,扮演两者间的胶着剂。[Gamma95] 对於 iterator 这种设计样式(design pattern)的定义是:提供一种方法,俾得依序巡访某个聚合物件(容器)所含的各个元素,而又不需曝露该聚合物件的内部表述方式。STL 共提供了五种 iterators 型态,以及各种衍生变化。Iterator 是 STL 中最重要最抽象的一个组件,它使容器与演算法可以各自独立发展,这是一种突破性的观念。不论就实作技术或抽象观念,iterator 都是 STL 中最关键的成份。了解了 iterators,也就进入了 STL 的大门。

step_by_step 2003-10-15
  • 打赏
  • 举报
回复
迭代器是STL里面算法和容器之间的桥梁和接口,体现了STL设计的灵活性,你只要设计你自己容器的迭代器就可以使用STL提供的算法了。
Wolf0403 2003-10-13
  • 打赏
  • 举报
回复
另外:迭代器不是异常安全的
Wolf0403 2003-10-13
  • 打赏
  • 举报
回复
设计不同的迭代器是为了适应不同的容器,比如 vector 支持 operator[] 所以有 random_access_iterator 来支持,可以供 sort 算法使用。一种迭代器对应一种容器支持的访问操作,还是为了细化区分各种情况,提高效率。
STL 的五种迭代器,分别适用于不同的算法,并由不同的容器来支持,因此体现了灵活性
sevencat 2003-10-13
  • 打赏
  • 举报
回复
猴老的书可以不用看,直接将原代码打印出来放到床头就可以了(不要全部打,只打你需要的)。

sevencat 2003-10-13
  • 打赏
  • 举报
回复
我认为迭代器不是为了效率,实际上有时候是以效率为代价的,目的是通用。
Andy84920 2003-10-12
  • 打赏
  • 举报
回复


为什么定义这么多迭代器,就是为了效率,在需要什么更低级的迭代器时就用它.

只有在需要用更高级的迭代时就用高级一点的,这是个效率上的考量!
firingme 2003-10-12
  • 打赏
  • 举报
回复
Matthew H. Austern 的《泛型编程与STL》一书的确在STL的规格说明和幕后思想阐述上面至今无出其右者。但是我觉得它也有自己的欠缺——主要就是在实现上面没有相应的指导。

而P.J等人的《C++ STL》一书,则正好弥补了这个缺陷,所以我觉得把这两本书结合起来看,效果是最好的。

至于Hou Sir的《STL源码剖析》,胜在运作和装帧和内容的亲和力,实际内容的深度和阐述的角度还是比不上Austern和P.J博士的,作为入门是首选,但如果要深造,还是《C++ STL》更好些。
yhbttfile 2003-10-10
  • 打赏
  • 举报
回复
设计模式中对叠代器模式有一个比较清楚的描述。
cxjddd 2003-10-09
  • 打赏
  • 举报
回复
不要想迭代器很多,其实就那么几类。分好类,就容易知道它们的行为和特点。然后,你可以为你的每个类都写上迭代器。
RookieStar 2003-10-06
  • 打赏
  • 举报
回复
迭代器真的很好用!
cxjddd 2003-09-29
  • 打赏
  • 举报
回复
iterator 是按功能分的。
loveghb 2003-09-28
  • 打赏
  • 举报
回复
迭代器是个了不起的设计,STL本身也很伟大啊。
用起来比较方便,内部封装了指针。
还可以和算法“粘合”起来!
偶也是在学习中......
Tonyfengliang 2003-09-28
  • 打赏
  • 举报
回复
看了候捷的stl源码剖析以后,就明白了很多了!
snipersu 2003-08-31
  • 打赏
  • 举报
回复
个人观点:
就是为了让程序员使用容器时方便!
程序员操纵iterator就行了。
才方便的基础上采用一些高效的算法来“运算,操作”。
Mephisto_76 2003-08-30
  • 打赏
  • 举报
回复
为了提高程序的效率 ,对不同类型的iterator 采用不同的算法,你可以看看copy 函数,对于指针,采用的memmove 和memcpy()。对于其他的Input iterator采用的是
for ( iterator it = con,begin();it != con,end();it++)
Process(*p) 的形式。
sean717 2003-08-29
  • 打赏
  • 举报
回复
如果只定一个双向的迭代器就可以解决所有的迭代器遍历问题。。为什么还要那么麻烦??\
================================================================================
效率上差别很大

就像vector可以用在所有场合 为什么要有list和stack一个道理
sevencat 2003-08-28
  • 打赏
  • 举报
回复
你自己写过链表过吗?
还记得里面的遍列是怎么实现的吗?
迭代器就是帮你做这些事情的.
只不过像数组我可以随机的取一个值.
而单向链表只能向前
双向链表只能向前或向后而不能随机(除非人为模仿)
Crystal_arrow 2003-08-27
  • 打赏
  • 举报
回复
对使用者感觉简单,其实里面有很多种迭代器得
cppTrier 2003-08-27
  • 打赏
  • 举报
回复
STL中的每个容器都提供自己特定的迭代器,以供用户遍历整个容器。STL中的算法,就使迭代器来对容器进行遍历。
迭代器是遍历的一种抽象,虽然不同的容器的遍历方式完全不同,但是通过迭代器,STL中的算法可以用统一的方式对不同容器进行遍历,这样就不需要为每种容器都提供一个特殊的算法了。
加载更多回复(8)

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧