C ++的STL的基本迭代器模型基本上包括“给我当前位置的项目”操作符*
,“转到下一项”操作符++
和谓词{{ 1}} / ==
用于检查(大多数情况下)结束迭代器。当然,还有各种随机访问的迭代器,但最基本的迭代器看起来如上所述。
相比之下,Java有!=
和next()
。接下来大致相当于使用hasNext()
然后使用++
。 *
就像比较结束。为什么Java没有采用C ++模型(当然,它没有运算符重载所以它必须通过函数来模仿它)?特别是,为什么对hasNext()
方法的末尾迭代器进行了比较?我发现在Java中编写迭代器比在C ++中编写迭代器更困难,因为hasNext()
和next()
背后的逻辑通常比C ++运算符中的逻辑更复杂。
答案 0 :(得分:5)
首先,您必须了解C ++有指针,迭代器模拟指针。
Java没有指针,所有东西都是Java中的对象
C ++交互者功能更强大。
请参阅上述评论中的重复答案。
Iterators in C++ (stl) vs Java, is there a conceptual difference?
What is the difference between iterators in Java and C++?
我建议你阅读如何用Java处理对象 - Objects in Java
答案 1 :(得分:0)
也许您应该将C ++迭代器与具有索引访问权限的Java ListIterator进行比较。 Java的Iterator适用于所有类型的集合,并且避免使用O(n)访问可能的低效索引访问。这是一个选择。当然,可以迭代一个子列表,实现一些相同的结果。
for (item : collection)
。collection.forEach(function)
。 Java 8 forEach
是一个明确的改进:来自外部的迭代器维持一个状态。 forEach
由集合类本身完成。这会对表现力(流畅的组合),效率,并发性和优化产生影响。 (可在别处阅读。)
答案 2 :(得分:0)
原谅我的英语
1,java样式迭代器就像c ++前向迭代器类一样,是c ++迭代器的一部分
2,在c ++中,迭代器只是STL的一部分,在c ++中定义一个新的迭代器不仅仅意味着你可以遍历一个数据集,它还意味着你可以使用整个STL的能力,这非常强大;