Java和C++中的迭代器有什么区别?

ria*_*ria 4 c++ java iterator

Java中Iterator的实现与C++中的实现有何不同?

Tom*_*ine 8

在当前的C++(98)标准库(特别是以前称为STL的部分)中定义了一种非常接近C指针(包括算术)的迭代器形式.因此他们只是指向某个地方.为了有用,您通常需要两个指针,以便您可以在它们之间进行迭代.我理解C++ 0x引入的范围更像Java迭代器.

Java 在1.2中引入了Iterator(和ListIterator)接口,主要取代了更详细的Enumerable.Java没有指针算术,因此不需要像指针一样工作.他们有一种hasNext方法来查看它们是否已经结束,而不是需要两个迭代器.缺点是它们不够灵活.系统需要方法subList而不是在两个迭代器之间迭代是包含列表中的特定点.

风格的一般差异是,虽然C++通过模板使用"静态多态",但Java使用接口和常见的动态多态.

迭代器的概念是提供粘合剂以允许分离"算法"(真正的控制流)和数据容器.两种方法都做得相当好.在理想情况下,"普通"代码几乎不应该看到迭代器.

  • 我认为这个问题没有一个好的答案,但这是一个问题.+1 (2认同)

小智 6

C++没有指定迭代器的实现方式.但它确实指定了它们的接口以及它们必须提供的最小行为才能使用其他标准库组件.

例如,对于输入迭代器,标准指定必须通过*运算符解除引用迭代器.但是,它没有说明如何实施该运营商.

  • Java也没有指定; Iterator <T>是一个接口.我认为没有任何真正的方法来回答除此之外的问题. (2认同)