在过去的几周中,我一直在学习迭代器。我仍然不明白在遍历链接列表和穿行其中之间的主要区别。我知道遍历意味着浏览(访问每个元素)链接列表,而当迭代时,您基本上做了同样的事情,但有什么不同,为什么不能通过一切(标准库数据结构)进行迭代?
在过去的几周中,我一直在学习迭代器。我仍然不明白在遍历链接列表和穿行其中之间的主要区别。我知道遍历意味着浏览(访问每个元素)链接列表,而当迭代时,您基本上做了同样的事情,但有什么不同,为什么不能通过一切(标准库数据结构)进行迭代?
for
循环)。1 特别是杰拉尔德·萨斯曼(Gerald Sussman)在SICP中的用法。
2 但是,看似非线性的数据结构,例如树,可以通过应用右手法则(墙跟随算法)进行线性化以便进行迭代,并因此可以在没有堆栈的情况下遍历。
据我所知,它们是同义词。您为什么认为有区别呢?
我感觉 ;),“遍历”有时用于指示利用内部结构。你通过从父节点到子节点遍历树,或者通过跟随下一个指针遍历列表。
另一方面,数组可以迭代。您拥有所有的元素,只需要逐个处理即可。
iterator
为“代理”,称呼traverse
为“操作”。实际上,当人们讲述在某些东西上进行traversing
时,常常把它和在某些东西上进行iteration
混淆(因为对我而言,iteration
是指数值方法,通过迭代收敛于数学点)。但另一方面,我也经常混用这两个词。traversal
的概念,则无法在其上进行iteration
。至少,要遍历某些东西,你需要知道是否有邻居以及如何到达它。迭代器基本上为您提供了遍历数据结构的功能 - 访问每个元素。我会将 traversing
和 iterating
视为同义词。有 iterators
,但是我不知道编程中的 traversers
。
and why cannot you iterate through everything(STL datastructures)?
一些数据结构没有提供此类信息。例如,在堆栈上,您不应该能够遍历所有元素,因为您只能访问堆栈的顶部。