C ++迭代器模型与Java Iterator模型

时间:2013-05-27 15:28:24

标签: java c++ iterator

C ++的STL的基本迭代器模型基本上包括“给我当前位置的项目”操作符*,“转到下一项”操作符++和谓词{{ 1}} / ==用于检查(大多数情况下)结束迭代器。当然,还有各种随机访问的迭代器,但最基本的迭代器看起来如上所述。

相比之下,Java有!=next()。接下来大致相当于使用hasNext()然后使用++*就像比较结束。为什么Java没有采用C ++模型(当然,它没有运算符重载所以它必须通过函数来​​模仿它)?特别是,为什么对hasNext()方法的末尾迭代器进行了比较?我发现在Java中编写迭代器比在C ++中编写迭代器更困难,因为hasNext()next()背后的逻辑通常比C ++运算符中的逻辑更复杂。

3 个答案:

答案 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)访问可能的低效索引访问。这是一个选择。当然,可以迭代一个子列表,实现一些相同的结果。

  • 在Java 7中,迭代器已经具有第二个公民身份,因为有for (item : collection)
  • 在Java 8中提供了collection.forEach(function)

Java 8 forEach是一个明确的改进:来自外部的迭代器维持一个状态。 forEach由集合类本身完成。这会对表现力(流畅的组合),效率,并发性和优化产生影响。 (可在别处阅读。)

答案 2 :(得分:0)

原谅我的英语

1,java样式迭代器就像c ++前向迭代器类一样,是c ++迭代器的一部分

2,在c ++中,迭代器只是STL的一部分,在c ++中定义一个新的迭代器不仅仅意味着你可以遍历一个数据集,它还意味着你可以使用整个STL的能力,这非常强大;