问题标签 [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 投票
13 回答
5069 浏览

c++ - 循环内的迭代器初始化是否被认为是不好的风格,为什么?

通常你会发现这样的 STL 代码:

但我们实际上有这样的建议:

如果您担心范围,请添加括号:

这应该可以提高速度和效率,尤其是在您对控制台进行编程时,因为在循环的每次迭代中都不会调用 .end() 函数。我只是认为性能改进是理所当然的,这听起来很合理,但我不知道有多少,这当然取决于容器的类型和实际使用的 STL 实现。但是在使用这种风格几个月后,我实际上比第一种更喜欢它。

原因是可读性:for 行整洁。在实际生产代码中使用限定符和成员变量,如果您使用第一个示例中的样式,很容易使行很长。这就是为什么我在这个例子中故意让它有一个水平滚动条,只是为了让你明白我在说什么。;)

另一方面,您突然将 Iter 变量引入 for 循环的外部范围。但是,至少在我工作的环境中,即使在第一个示例中,Iter 也可以在外部范围内访问。

你对此有什么看法?除了可能限制Iter的范围之外,第一种风格是否有任何专业人士?

0 投票
11 回答
8264 浏览

java - 改进的集合迭代器

就个人而言,我发现 java.util.Iterator 提供的功能范围相当可悲。至少,我希望有以下方法:

  • peek() 返回下一个元素而不向前移动迭代器
  • previous() 返回前一个元素

尽管还有很多其他的可能性,例如 first() 和 last()。

有谁知道这样的第 3 方迭代器是否存在?它可能需要实现为 java.util.Iterator 的装饰器,以便它可以与现有的 java 集合一起使用。理想情况下,它应该是“泛型意识”。

在此先感谢,唐

0 投票
8 回答
16093 浏览

c++ - 列表迭代器不可递增

我有一个使用 Visual Studio 2003 构建的旧项目,最近我用 vs2005 重新编译了它。但是,在运行时,我收到以下错误:

列表迭代器不可递增

我将程序跟踪到此功能:

我不是 C++ 专家,这是 VS 调试器给我的。有人可以向我解释问题是什么吗?

谢谢

0 投票
6 回答
817 浏览

php - 一个对象应该实现迭代器还是包含另一个实现迭代器的对象

我试图了解 SPL 迭代器,我想出了 2 种方法来处理它。我认为第一个版本不那么复杂,但第二个版本有作曲的感觉(我认为)。

我没有看到哪一个比另一个更可取?还是我只是让这件事复杂化了?

以下是我的想法:

该对象实现了一个迭代器:

该对象包含一个可迭代的对象:

0 投票
3 回答
1430 浏览

c++ - 什么是非空 STL 擦除的安全等价物?

假设我有一个 hash_map 和一个类似的代码

但是 GCC 的 STL 不会在擦除时返回迭代器,而是一个 void。现在是这样的代码

安全(即不会使迭代器无效或做任何其他意外或不愉快的事情)?请注意这是一个 hash_map。

0 投票
6 回答
19702 浏览

java - 外部迭代器与内部迭代器

什么是 Java 中的外部和内部迭代器?

0 投票
47 回答
2829514 浏览

python - “yield”关键字有什么作用?

yieldPython中关键字的用途是什么?它有什么作用?

例如,我试图理解这段代码1

这是调用者:

调用方法时会发生什么_get_child_candidates?是否返回列表?单一元素?又叫了吗?后续调用何时停止?


1. 这段代码由 Jochen Schulz (jrschulz) 编写,他为度量空间制作了一个很棒的 Python 库。这是完整源代码的链接:Module mspace
0 投票
13 回答
25167 浏览

python - 如何合并两个 python 迭代器?

我有两个迭代器,一个list和一个itertools.count对象(即一个无限值生成器)。我想将这两者合并到一个结果迭代器中,它将在两者之间交替产生值:

最简单、最简洁的方法是什么?

0 投票
10 回答
19268 浏览

python - 什么时候不适合使用 python 生成器?

这与您可以使用 Python 生成器函数做什么?: python 生成器、生成器表达式和itertools模块是我最近最喜欢的 python 功能。它们在设置操作链以对大量数据执行时特别有用——我经常在处理 DSV 文件时使用它们。

那么什么时候适合使用生成器、生成器表达式或itertools函数呢?

  • 我应该什么时候更喜欢zip()itertools.izip()或者
  • range()超过xrange(), 或
  • [x for x in foo]结束了(x for x in foo)

显然,我们最终需要将生成器“解析”为实际数据,通常是通过创建一个列表或使用非生成器循环对其进行迭代。有时我们只需要知道长度。这不是我要问的。

我们使用生成器,这样我们就不会为临时数据分配新列表到内存中。这对于大型数据集尤其有意义。它对小型数据集也有意义吗?是否存在明显的内存/cpu 权衡?

鉴于列表理解性能与 map() 和 filter()的令人大开眼界的讨论,如果有人对此进行了一些分析,我特别感兴趣。(替代链接

0 投票
8 回答
1610 浏览

c++ - 如何使用 std::copy 读取任意数量的值?

我正在尝试编写与此相反的操作:

它应该是这样的:

但是我坚持使用“结束”迭代器——输入插入器不能使用 std::advance ,我也不能使用具有相同源的两个流......

有什么优雅的方法可以解决这个问题吗?当然我可以使用 for 循环,但也许有更好的东西:)