社区
工具平台和程序库
帖子详情
STL中的迭代器大家来讨论一下!
Tonyfengliang
2003-08-22 09:32:38
在看C++STL,迭代器看的不是很懂。有很多种迭代器。用VC种的POSITION的迭代器的时候,就是把他作为一个数组的指针理解的。在stl种怎么有这么多种迭代器啊。我只用考虑什么容器用那种迭代器就可以了吗?
大家都是怎么理解和运用迭代器的??
...全文
168
28
打赏
收藏
STL中的迭代器大家来讨论一下!
在看C++STL,迭代器看的不是很懂。有很多种迭代器。用VC种的POSITION的迭代器的时候,就是把他作为一个数组的指针理解的。在stl种怎么有这么多种迭代器啊。我只用考虑什么容器用那种迭代器就可以了吗? 大家都是怎么理解和运用迭代器的??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
STL
_
中
文版.zip
本书对C++
STL
进行了全面而深入的阐述。
STL
(标准模板库)是在惠普实验室
中
开发的,已纳入ANSI/ISO C++标准。其
中
的代码采用模板类及模板函数的方式,可以极大地提高编程效率。本书由P.J. Plauger等四位对C++
STL
的实现有着卓越贡献的大师撰写,详细讨论了C++
STL
的各个部分。全书分为16章,其
中
的13章通过背景知识、功能描述、头文件代码、测试程序和习题,分别讲述了C++
STL
中
的13个头文件,其他章节介绍了
STL
中
广泛涉及的三个主题--
迭代器
、算法和容器。本书附录列出了接口和术语表,最后列出了参考文献。 本书适合对C++有一定了解的程序员及高等院校师生阅读。
<
STL
中
文版>>
STL
(标准模板库)是在惠普实验室
中
开发的,已纳入ANSI/ISO C++标准。其
中
的代码采用模板类及模板函数的方式,可以极大地提高编程效率。本书由P.J. Plauger等四位对C++
STL
的实现有着卓越贡献的大师撰写,详细讨论了C++
STL
的各个部分。全书分为16章,其
中
的13章通过背景知识、功能描述、头文件代码、测试程序和习题,分别讲述了C++
STL
中
的13个头文件,其他章节介绍了
STL
中
广泛涉及的三个主题--
迭代器
、算法和容器。本书附录列出了接口和术语表,最后列出了参考文献。 本书适合对C++有一定了解的程序员及高等院校师生阅读。
程序员为什么还要刷题-libcxx-ranges:libcxx-范围
程序员常刷题介绍 C++ 标准化委员会已责成第 9 研究组 (SG9) 研究使用范围代替
迭代器
或除
迭代器
之外使用范围的想法。[fn:1] 这是尝试(重新)使用范围而不是
迭代器
实现
STL
。 此实现的目的只是为了让讨论继续进行,无论是消极的(拒绝范围)还是积极的(范围的进一步讨论)。 实现有目的地尽可能接近原始[fn:2]。 这种接近性允许人们直接将带有范围的
STL
实现与带有
迭代器
的实现进行比较。 有时,这种直接方法可能会导致实现对范围而言不是最佳的,但这是一个需要进一步讨论的主题。 该实现目前尚未完成,但它涵盖了相当大的
STL
块。 本文档稍后将更详细地讨论实施状态。 这个 README 文件提供了一个非常基本的实现讨论,希望 SG9 可以扩展它。 范围 SG9 必须回答的一个大问题是为什么要使用范围? 也就是说,范围解决了什么问题? 此实现将有望帮助调查该问题。 接下来,我们讨论范围和
迭代器
之间的差异和相似之处。 范围“vs.”
迭代器
迭代器
是指针的泛化,允许抽象算法没有性能损失烤箱算法实际用指针实现。 但是,实际上
STL
中
的所有算法都在范围上运行并返回范围。 范围可以保
STL
容器
迭代器
失效问题讨论
STL
源码剖析---
迭代器
失效小结 vector
迭代器
的几种失效的情况: 1、当插入(push_back)一个元素后,end操作返回的
迭代器
肯定失效。 2、当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时first和end操作返回的
迭代器
都会失效。 3、当进行删除操作(erase,pop_back...
STL
迭代器
失效性问题总结
STL
迭代器
失效性问题总结 我们讨论 vector, deque, list, set, map 的
迭代器
失效问题。 vector
迭代器
当插入一个元素后,插入点之前的
迭代器
如果未扩容则不受影响,插入点之后的
迭代器
失效; 当插入一个元素后,capacity 如果有变化,则容器需要重新分配内存,所有
迭代器
都会失效; 当进行删除操作后,指向删除点及之后元素的
迭代器
全部失效。 deque
迭代器
在容器 begin/end 插入操作所有
迭代器
不受影响; 在容器非 begin/end 的位置插入和删除操作都会
工具平台和程序库
24,854
社区成员
27,343
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章