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

c# - 实现 C# yield 语句的算法

我很想自己弄清楚,但我想知道将带有 yield 语句的函数转换为枚举器的状态机的算法是什么?例如,C# 是如何做到这一点的:

进入这个:

当然,根据原始代码,结果可能会完全不同。

0 投票
7 回答
4755 浏览

c++ - 使用迭代器获取向量的索引

当迭代向量的元素时,最好使用迭代器而不是索引(请参阅为什么使用迭代器而不是数组索引?)。

但是,可能需要在循环体中使用索引。在这种情况下,考虑到性能和灵活性/可扩展性,以下哪一项更可取?

  1. 恢复到索引循环/li>
  2. 计算偏移量/li>
  3. 使用 std::distance/li>
0 投票
3 回答
3824 浏览

c++ - std::list 上的 splice() 和迭代器失效

的 3 参数形式list::splice()将单个元素从一个列表移动到另一个列表。 SGI 的文档明确指出所有迭代器,包括指向被移动元素的迭代器仍然有效。 Roguewave 的文档没有说明splice()方法的迭代器失效属性,而 C++ 标准明确声明它使所有迭代器和对被拼接元素的引用失效。

splicing() 在实践中按照 SGI 的定义工作,但在微软 STL 实现的调试/安全 SCL 版本(严格遵循标准的字母)中出现断言失败(取消引用无效迭代器)。

现在,我使用 list 正是因为我想在列表之间移动一个元素,同时保留指向它的迭代器的有效性。该标准对原始 SGI 的规范进行了极其无益的更改。

我该如何解决这个问题?或者我应该务实一点,把头埋在沙子里(因为在实践中拼接不会使迭代器失效——即使在 MS 的实现中,一旦迭代器调试被关闭)。

0 投票
6 回答
101706 浏览

c++ - 创建我自己的迭代器

我正在努力学习 C++,所以如果这个问题表明缺乏基础知识,请原谅我,你看,事实是,我缺乏基础知识。

我需要一些帮助来解决如何为我创建的类创建迭代器。

我有一个“形状”类,它有一个点容器。我有一个类'Piece',它引用了一个形状并定义了一个形状的位置。Piece 没有 Shape,它只是引用一个 Shape。

我希望它看起来像 Piece 是一个 Points 容器,它与它引用的 Shape 相同,但添加了 Piece 位置的偏移量。

我希望能够遍历 Piece 的点,就像 Piece 本身就是一个容器一样。我做了一些阅读,并没有找到任何对我有帮助的东西。我将非常感谢任何指示。

0 投票
15 回答
27416 浏览

c++ - 如何检测 std::map 循环中的最后一次迭代?

我试图找出最好的方法来确定我是否处于地图上循环的最后一次迭代中,以便执行以下操作:

似乎有几种方法可以做到这一点:随机访问迭代器、distance函数等。规范方法是什么?

编辑:地图没有随机访问迭代器!

0 投票
4 回答
7902 浏览

c++ - 如何在不暴露使用的容器的情况下暴露迭代器?

我已经使用 C# 有一段时间了,回到 C++ 是一件很头疼的事情。我正在尝试将我的一些实践从 C# 带到 C++,但我发现了一些阻力,我很乐意接受你的帮助。

我想为这样的类公开一个迭代器:

我在尝试一些不成问题的事情吗?我应该只是 typedef std::vector< T >::iterator 吗?我希望只依赖于迭代器,而不是实现容器......

0 投票
2 回答
790 浏览

c++ - 将迭代器用作参数时在内部增加迭代器是否安全?

目前我正在尝试从集合中删除一系列迭代器,但是 GCC 的标准库似乎被破坏了,因为 std::set::erase(iterator) 应该返回一个迭代器(下一个迭代器),但是在 GCC 它返回 void (哪个是标准的?)

无论如何我想写:

但是 GCC 不喜欢它......所以写这个安全吗?

编辑:是的,我正在检查 mySet.end();

0 投票
5 回答
2066 浏览

c++ - 围绕现有数组的 STL 非复制包装器?

是否可以为现有的 POD 类型元素数组创建一个类似 STL 的容器,甚至只是一个 STL 样式的迭代器?

例如,假设我有一个整数数组。能够调用一些 STL 函数(例如 find_if、count_if 或直接在此数组上排序)会很方便。

非解决方案:复制整个数组,甚至只是对元素的引用。目标是非常节省内存和时间,同时希望允许使用其他 STL 算法。

0 投票
6 回答
10655 浏览

c++ - 迭代器..为什么要使用它们?

在 STL 库中,一些容器具有迭代器,并且通常认为它们是迭代这些容器的更好方法,而不是简单的 for 循环,例如

谁能告诉我为什么以及在什么情况下我应该使用迭代器以及在什么情况下上面的代码片段?

0 投票
5 回答
53977 浏览

c++ - 您如何通过 STL 列表向后迭代?

我正在编写一些 Windows 和 Mac 之间的跨平台代码。

如果 list::end() “返回一个迭代器,该迭代器指向列表中最后一个元素之后的位置”并且可以在向前遍历列表时检查,那么向后遍历的最佳方法是什么?

此代码适用于 Mac,但不适用于 Windows(不能递减超过第一个元素):

这适用于 Windows:

是否有另一种可以在 for 循环中实现的向后遍历方法?