C++ 迭代器模型与 Java 迭代器模型
C++ Iterator model versus Java Iterator model
C++ STL 的基本迭代器模型基本上由一个"给我当前位置的项目"运算符*
、一个"转到下一个项目"运算符++
和一个谓词 ==
/!=
组成,用于检查(大多数时候(结束迭代器。当然,还有各种具有随机访问的进一步迭代器,但最基本的迭代器看起来像上面描述的那样。
相比之下,Java有next()
和hasNext()
。Next 大致相当于使用 ++
然后使用 *
。 hasNext()
有点像与结束的比较。为什么Java没有采用C++模型(当然,它没有运算符重载,所以它必须通过函数来模仿它(?特别是,为什么hasNext()
方法会放弃与结束迭代器的比较?我发现用 Java 编写迭代器通常比用 C++ 编写迭代器更难,因为next()
和hasNext()
背后的逻辑通常比C++运算符中的逻辑更复杂。
首先,您必须了解C++具有指针,迭代器模拟指针。
Java没有指针,一切都是Java中的对象
C++交互器要强大得多。
请参阅上述评论中的重复答案。
C++ (stl( 与 Java 中的迭代器,在概念上有什么区别吗?
Java 和 C++ 中的迭代器有什么区别?
我建议你阅读如何在Java中处理对象 - Java中的对象
也许你应该将C++迭代器与具有索引访问的Java ListIterator进行比较。Java的迭代器适用于所有类型的集合,并且避免了O(n(访问可能效率低下的索引访问。这是一种选择。当然,可以迭代子列表,获得相同的结果。
- 在Java 7中,迭代器已经具有第二公民身份,因为有
for (item : collection)
。 - 在Java 8中提供了
collection.forEach(function)
。
Java 8 forEach
是一个明确的改进:外部的迭代器维护一个状态。 forEach
由集合类本身完成。这对表现力(流畅组合(、效率、并发性和优化都有影响。(可以在其他地方阅读。
原谅我的英语
1、Java风格的迭代器就像C++前向迭代器类别一样,即C++迭代器的一部分
2、在C++中,迭代器只是STL的一部分,在C++中定义一个新的迭代器不仅仅意味着你可以遍历一个数据集,它还意味着你可以使用整个STL的能力,那是非常强大的;
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 不明白迭代器,引用和指针失效,一个例子
- 我可以使用反向迭代器作为ForwardIt吗
- ESP8266单片机矢量迭代器的C++问题
- 如何在C++中将迭代器作为函数参数传递
- 是否应避免从非常量迭代器转换为常量迭代器?
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- C++ 迭代器模型与 Java 迭代器模型