C++ iterator 如何实现

summer_more_more_tea 2008-12-19 12:51:06
实现了一个数据结构,想写一个iterator,遇到点问题.
首先是使用内部类还是友元的问题.我之前写过另一个小程序,因为滥用友元,结果代码看上去很乱,因此我不太倾向于使用友元;但是,如果使用内部类,就只能将iterator类声明为类的public成员,要不类外边引用不到iterator类对象.之前写过Java的迭代器,因为有Iterator接口,所以总是将自定义的迭代器类声明为类的private成员内部类.C++中有没有类似于Java Iterator接口之类的东西,或者说,自定义迭代器时有没有什么类可以继承?能不能有什么方法将iterator类声明为private成元内部类--就像Java那样.
还有,我看网上说,STL中的iterator是用友元实现的,这是为什么呢?使用友元的好处在哪?
高人指点,小生谢过先.
...全文
1071 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bfhtian 2008-12-19
  • 打赏
  • 举报
回复
看看源码
星羽 2008-12-19
  • 打赏
  • 举报
回复
.......你应该先看看stl的书,看看c++ primer吧
fiyaa 2008-12-19
  • 打赏
  • 举报
回复
学习
yshuise 2008-12-19
  • 打赏
  • 举报
回复
迭代器跟是不是“有元”没有关系。
迭代器只要满足限定条件即可:如,++,--,* != 就可以了。
xuruichen 2008-12-19
  • 打赏
  • 举报
回复
顶星羽,各个容器的ITERATOR是不一样的。
具体和JAVA是否一样有iterator接口就不知道了
sffofn 2008-12-19
  • 打赏
  • 举报
回复
c++primer 给你个地址 中文的电子书
http://download.csdn.net/source/832780
sffofn 2008-12-19
  • 打赏
  • 举报
回复
c++primer 给你个地址 中文的电子书
http://download.csdn.net/source/832780
SearchLife 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Chiyer 的回复:]
不同的stl实现版本,对 iterator的实现是不一样的

比如 vc 的stl 中的vector的iterator是一个friend class

而 sgi stl 中的vector的iterator 直接是一个数据的指针成员 类似这样 typedef value_type* iterator;

还有每个容器的iterator是不一样的


一般情况下,如果你 iterator 比较复杂就不太适合定义成内部类
[/Quote]

up,我今天才明白为什么用遍历容器时用!=而不是<=
SearchLife 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Chiyer 的回复:]
不同的stl实现版本,对 iterator的实现是不一样的

比如 vc 的stl 中的vector的iterator是一个friend class

而 sgi stl 中的vector的iterator 直接是一个数据的指针成员 类似这样 typedef value_type* iterator;

还有每个容器的iterator是不一样的


一般情况下,如果你 iterator 比较复杂就不太适合定义成内部类
[/Quote]

up,我今天才明白为什么用遍历容器时用!=而不是<=
jiangheng2008 2008-12-19
  • 打赏
  • 举报
回复
学习
nullah 2008-12-19
  • 打赏
  • 举报
回复
顶星羽大哥~~~~
wiowei 2008-12-19
  • 打赏
  • 举报
回复
定义成外部类比较好,至于用友元还是指针,其实实现是差不多的,友元也是通过指针实现的。
星羽 2008-12-19
  • 打赏
  • 举报
回复
不同的stl实现版本,对 iterator的实现是不一样的

比如 vc 的stl 中的vector的iterator是一个friend class

而 sgi stl 中的vector的iterator 直接是一个数据的指针成员 类似这样 typedef value_type* iterator;

还有每个容器的iterator是不一样的


一般情况下,如果你 iterator 比较复杂就不太适合定义成内部类
threeleafzerg007 2008-12-19
  • 打赏
  • 举报
回复
http://hi.baidu.com/crash1/blog/item/90269a088a8000d562d986b3.html
Some useful information about the iterator's implementation.

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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