泛型概念的一个问题,关于iterator的!

X_Ben2000 2003-07-14 12:00:32
书上说:纯粹抽象的泛化概念:“行为类似迭代器”的任何东西就是一种迭代器。
anything that behaves like an iterator is an
iterator.

哪我想问问:迭代器又有那些行为呢??满足那些行为后,就可以说是迭代器??
...全文
47 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
magic007 2003-07-31
  • 打赏
  • 举报
回复
GOF《设计模式》中有iterator模式的讨论,现应用于stl中而已
Arila 2003-07-31
  • 打赏
  • 举报
回复
iterator是一种模式 这种模式最初的想法只不过是为了实现对一个数据结构的不同遍历方法而考虑的

标准模板库将它发扬光大了
Mephisto_76 2003-07-31
  • 打赏
  • 举报
回复
你可以把指针当作当作iterator来使用.
GZCompiler 2003-07-28
  • 打赏
  • 举报
回复
softworm163 2003-07-28
  • 打赏
  • 举报
回复
至少具备下列接口(C++中)
operator++
operator++(int)
operator--()
operator--(int)
operator*(...)
operator->(...)
还有它的iterator_traits_tag
RedSunRS 2003-07-16
  • 打赏
  • 举报
回复
(OO的理论不是最难的,最难是当你面对一个实际问题时,如何用最好的方案来解决。)
关于迭代器它的本质应当是解决以一种通用形式解决所有对容器的访问。最基本的功能应当有对当前数据的操作,*->,访问下一个数据++,--。有了这个就不能关心list,和vector是如果在空间上组织数据了。(个人愈见)
magic007 2003-07-16
  • 打赏
  • 举报
回复
设计模式中有Iterator模式。STL中的iterator就是Iterator模式的一种实现。
glasswing 2003-07-16
  • 打赏
  • 举报
回复
>>这其实得益于Class中的封装及向上转形(Upcasting),而且还导致了一个新东东 Inner Class内隐类的出现成为必然。而在这方面,尽管Java和C++都有相似的地方,但我觉得Java的确比C++做得好,更让人感觉到OO的妙用,而且是安全的。

说说封装与upcasting怎么导致inner class??怎么与我的理解不一样?
kingofark 2003-07-15
  • 打赏
  • 举报
回复
泛型编程与STL 里面谈到的concept是一种抽象化的描述方式。

把问题抽象化不是为了显得高深,而是为了能够系统的描述一种理论或者一种逻辑架构。就好像我们使用数学这种表述方式来描述现实世界中的许多问题域一样。
sirouni2003 2003-07-15
  • 打赏
  • 举报
回复
最基本的是要提供 * 与 -> 操作的可以算作iterator
gzlucky 2003-07-15
  • 打赏
  • 举报
回复
我明白大家所说的,但如果没接触过的的确比较难以真正明白。其实这个东东我一直都不太清楚其用处,后来我在学Java时,终于在 Thinking in Java中得到领悟。

这其实得益于Class中的封装及向上转形(Upcasting),而且还导致了一个新东东 Inner Class内隐类的出现成为必然。而在这方面,尽管Java和C++都有相似的地方,但我觉得Java的确比C++做得好,更让人感觉到OO的妙用,而且是安全的。

如果这几点都能悟透的话(不过我还在这个过程中),我觉得OO的东东就差不多了,因为当中包含了OO中很多必要的元素,封装、继承、抽象等。这些都过了,其他的就好办了。
X_Ben2000 2003-07-15
  • 打赏
  • 举报
回复
谢谢各位的解答哈~~~非常谢谢!!
TopCat 2003-07-15
  • 打赏
  • 举报
回复
迭代器的行为就是像dengyunze(dyunze)所说的那些。
只要一个东西(类、指针或者别的什么)可以进行这些操作,那么它就可以被看作一个迭代器。
GZCompiler 2003-07-15
  • 打赏
  • 举报
回复
迭代器是一种概念,STL的各种对象中有各自的实现,但对于用户来说看起来用法是一样的。

如我们可以说“下一个苹果或第一个苹果”,用同样的方式,也可以说“下一个人或第一个人”,
所以“下一个,第一个”这种描述就可以抽象出来独立于实际的事物,达到一种通用。
你所提到的概念是说,可以被称作“迭代器”的,是要具备一些特定的行为(或功能)。

你去用用C++的STL就知道迭代器一般都有些什么行为了。
晨星 2003-07-14
  • 打赏
  • 举报
回复
呵呵,用多了就明白了。

个人觉得像“行为类似迭代器的任何东西就是一种迭代器”这种话,只能用来印证你原有的理解,而无法用来教你怎么理解。
sam1111 2003-07-14
  • 打赏
  • 举报
回复
其实是Concept的概念,只要满足迭代器所要求的Concept,就可以作为迭代器使用。

看看《泛型编程与STL》
  • 打赏
  • 举报
回复
我觉得好像iterator的定义没有这么深邃吧
它只是让客户在不了解容器内部结构的情况下可以方便的访问内部的元素而已,换句话说我们可以不暴露容器内部结构的情况下让客户访问元素。
iterator可以就是一个类型,它提供了遍历某个容器的操作,使用户可以从一个元素得到下一个元素而不必考虑容器内部结构(如list内元素其实是不支持++的)
overawe 2003-07-14
  • 打赏
  • 举报
回复
inputIterator 能读
outputIterator 能写
forwardIterator 可以一个方向遍历
BindirectionalIterator 双方向
randomAccessIterator 双方向 还可以在常数时间内访问任意容易

泛型算法要用的
langhaixin 2003-07-14
  • 打赏
  • 举报
回复
感觉1楼说得很有理,
iterator 只是一个用来安全访问容器的一个工具,
omtf 2003-07-14
  • 打赏
  • 举报
回复
泛型编程与STL
加载更多回复(1)

24,854

社区成员

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

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