问题标签 [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.
c++ - 循环内的迭代器初始化是否被认为是不好的风格,为什么?
通常你会发现这样的 STL 代码:
但我们实际上有这样的建议:
如果您担心范围,请添加括号:
这应该可以提高速度和效率,尤其是在您对控制台进行编程时,因为在循环的每次迭代中都不会调用 .end() 函数。我只是认为性能改进是理所当然的,这听起来很合理,但我不知道有多少,这当然取决于容器的类型和实际使用的 STL 实现。但是在使用这种风格几个月后,我实际上比第一种更喜欢它。
原因是可读性:for 行整洁。在实际生产代码中使用限定符和成员变量,如果您使用第一个示例中的样式,很容易使行很长。这就是为什么我在这个例子中故意让它有一个水平滚动条,只是为了让你明白我在说什么。;)
另一方面,您突然将 Iter 变量引入 for 循环的外部范围。但是,至少在我工作的环境中,即使在第一个示例中,Iter 也可以在外部范围内访问。
你对此有什么看法?除了可能限制Iter的范围之外,第一种风格是否有任何专业人士?
java - 改进的集合迭代器
就个人而言,我发现 java.util.Iterator 提供的功能范围相当可悲。至少,我希望有以下方法:
- peek() 返回下一个元素而不向前移动迭代器
- previous() 返回前一个元素
尽管还有很多其他的可能性,例如 first() 和 last()。
有谁知道这样的第 3 方迭代器是否存在?它可能需要实现为 java.util.Iterator 的装饰器,以便它可以与现有的 java 集合一起使用。理想情况下,它应该是“泛型意识”。
在此先感谢,唐
c++ - 列表迭代器不可递增
我有一个使用 Visual Studio 2003 构建的旧项目,最近我用 vs2005 重新编译了它。但是,在运行时,我收到以下错误:
列表迭代器不可递增
我将程序跟踪到此功能:
我不是 C++ 专家,这是 VS 调试器给我的。有人可以向我解释问题是什么吗?
谢谢
php - 一个对象应该实现迭代器还是包含另一个实现迭代器的对象
我试图了解 SPL 迭代器,我想出了 2 种方法来处理它。我认为第一个版本不那么复杂,但第二个版本有作曲的感觉(我认为)。
我没有看到哪一个比另一个更可取?还是我只是让这件事复杂化了?
以下是我的想法:
该对象实现了一个迭代器:
该对象包含一个可迭代的对象:
c++ - 什么是非空 STL 擦除的安全等价物?
假设我有一个 hash_map 和一个类似的代码
但是 GCC 的 STL 不会在擦除时返回迭代器,而是一个 void。现在是这样的代码
安全(即不会使迭代器无效或做任何其他意外或不愉快的事情)?请注意这是一个 hash_map。
java - 外部迭代器与内部迭代器
什么是 Java 中的外部和内部迭代器?
python - “yield”关键字有什么作用?
yield
Python中关键字的用途是什么?它有什么作用?
例如,我试图理解这段代码1:
这是调用者:
调用方法时会发生什么_get_child_candidates
?是否返回列表?单一元素?又叫了吗?后续调用何时停止?
1. 这段代码由 Jochen Schulz (jrschulz) 编写,他为度量空间制作了一个很棒的 Python 库。这是完整源代码的链接:Module mspace。
python - 如何合并两个 python 迭代器?
我有两个迭代器,一个list
和一个itertools.count
对象(即一个无限值生成器)。我想将这两者合并到一个结果迭代器中,它将在两者之间交替产生值:
最简单、最简洁的方法是什么?
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()的令人大开眼界的讨论,如果有人对此进行了一些分析,我特别感兴趣。(替代链接)
c++ - 如何使用 std::copy 读取任意数量的值?
我正在尝试编写与此相反的操作:
它应该是这样的:
但是我坚持使用“结束”迭代器——输入插入器不能使用 std::advance ,我也不能使用具有相同源的两个流......
有什么优雅的方法可以解决这个问题吗?当然我可以使用 for 循环,但也许有更好的东西:)