问题标签 [iterator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
410726 浏览

python - 如何构建一个基本的迭代器?

如何在 python 中创建迭代函数(或迭代器对象)?

0 投票
2 回答
17272 浏览

c++ - 如何在 C++ 中制作一棵树?

如何在 C++ 中创建使用迭代器而不是指针的树数据结构?我在 STL 中找不到任何可以做到这一点的东西。我想做的是能够像这样创建和操作树:


谢谢,tree.hh 似乎正是我想要的。

如果这是为了获得保存任意索引类型的数据结构的好处,优化搜索并擅长插入,那么考虑使用映射。

映射是一个关联容器,其性能保证与树的性能保证相同:对数搜索、对数插入、对数删除、线性空间。在内部,它们通常被实现为红黑树,尽管这不是保证。尽管如此,作为 STL 用户,您应该关心的只是 STL 算法和数据结构的性能保证。无论它们是作为树木还是小绿人来实现,对你来说都无关紧要。

我不确定我是否需要地图,但感谢您提供的信息。我会记得尽可能使用地图而不是实现树。

0 投票
9 回答
111191 浏览

bash - 如何在 Bash 中编写“for”循环?

我正在寻找基本循环,例如:

但是对于 Bash。

0 投票
9 回答
13258 浏览

java - C ++(stl)与Java中的迭代器,有概念上的区别吗?

在离开一段时间并试图清除旧瓜后,我将返回 C++。

在 Java 中,Iterator 是具有以下方法的容器的接口hasNext()next()remove(). 存在hasNext()意味着它具有被遍历的容器的限制的概念。

在 C++ 标准模板库中,迭代器似乎表示支持的数据类型或类operator++operator==但没有内置限制的概念,因此在前进到下一项之前需要进行比较。在正常情况下,用户必须通过比较两个迭代器来检查限制,第二个迭代器是容器端。

这里有趣的部分是,在 C++ 中,指针是指向数组的迭代器。STL 采用现有的东西并围绕它建立约定。

我错过了任何进一步的微妙之处吗?

0 投票
16 回答
24612 浏览

java - Java中的Iterator接口有什么好处?

我刚刚了解了 Java 集合框架如何在链表中实现数据结构。据我了解,Iterators这是一种遍历数据结构(例如列表)中的项目的方法。为什么要使用这个接口?为什么是方法hasNext()next()remove()不是直接编码到数据结构实现本身?

来自 Java 网站:链接文本

公共接口迭代器<E>

集合上的迭代器。Iterator 在 Java 集合框架中取代了 Enumeration。迭代器在两个方面不同于枚举:

  • 迭代器允许调用者在具有明确定义的语义的迭代期间从底层集合中删除元素。
  • 方法名称已得到改进。
此接口是 Java 集合框架的成员。

我尝试谷歌搜索,似乎无法找到明确的答案。有人能解释一下 Sun 选择使用它们的原因吗?是因为更好的设计吗?提高安全性?好的OO实践?

任何帮助将不胜感激。谢谢。

0 投票
15 回答
57460 浏览

java - 使用 for 循环或 while 循环进行迭代?

我经常看到这样的代码:

但我这样写(当 Java 1.5 不可用或每个都不能使用时):

因为

  • 它更短
  • 它保持i在较小的范围内
  • 它减少了混淆的机会。(是i在while外面用的?在哪里i声明的?)

我认为代码应该尽可能简单易懂,这样我只需要编写复杂的代码来完成复杂的事情。你怎么看?哪个更好?

来自:http: //jamesjava.blogspot.com/2006/04/iterating.html

0 投票
2 回答
24477 浏览

python - Python成语链接(展平)有限迭代的无限迭代?

假设我们有一个返回列表(或有限迭代器)的迭代器(无限迭代器),例如由

什么是获得迭代器(显然是无限的)的好 Python 习惯用法,它将从第一个迭代器返回每个元素,然后从第二个迭代器返回每个元素,依此类推。在上面的示例中,它将返回1,2,3,1,2,3,.... 迭代器是无限的,所以itertools.chain(*infinite)不会工作。

有关的

0 投票
10 回答
3448 浏览

c++ - 返回“任何类型的输入迭代器”而不是 vector::iterator 或 list::iterator

假设我想在 C++ 中实现一个数据结构来存储有向图。由于 STL 容器,弧将存储在节点中。我希望用户能够以类似 STL 的方式迭代节点的弧。

我遇到的问题是我不想在 Node 类(实际上是一个抽象基类)中公开我将在具体类中实际使用的 STL 容器。因此,我不想让我的方法返回 std::list::iterator 或 std::vector::iterator ...

我试过这个:

但这是不正确的,因为 vector::const_iterator 不能用于创建 ArcIterator。那么这个 ArcIterator 是什么?

我找到了这篇关于STL 的自定义迭代器的论文,但它没有帮助。我今天一定有点重... ;)

0 投票
21 回答
1271 浏览

variables - 一个名为 i 的变量是不可接受的吗?

就变量命名约定而言,应该命名迭代器i还是更语义化的东西count?如果你不使用i,为什么不呢?如果您认为这i是可以接受的,是否存在不应该使用它的迭代案例?

0 投票
27 回答
77763 浏览

c++ - 为什么使用迭代器而不是数组索引?

取以下两行代码:

还有这个:

我被告知第二种方式是首选。为什么会这样?