问题标签 [stdadvance]

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 投票
2 回答
2291 浏览

c++ - 如何实现 std::advance 以更改迭代器类型的行为?

我们所知道std::advance的如下:

目的

in元素推进迭代器。

如果i是随机访问迭代器,则该函数使用一次operator+or operator-,否则,该函数重复使用递增或递减运算符 ( operator++or operator--),直到n元素被推进。


我的问题如下:如何std::advance实现以识别是否it是随机访问迭代器?它怎么知道它可以使用operator+而不是operator++

0 投票
1 回答
55 浏览

c++ - std 或 boost 中是否有类似 circular_advance 的东西?

假设我想以循环方式通过容器:

idx = 0, idx =1 .. idx = size()-1, idx =0, idx =1 ...

有没有办法使用 std 或 boost ?我知道算法不是在容器上运行的,所以我猜我运气不好,但我只是想检查一下。

PS不需要手动实现,这很简单(如果你不忘记seq点:P),只需

0 投票
4 回答
6639 浏览

c++ - 推进标准地图的迭代器

主要问题已经在标题中:如何推进标准地图的迭代器?

但是由于大多数人问我为什么需要这个,我将提供更多信息:我有一个有几个地图的类。我至少有 2 个微分方程、至少 2 种传感器类型(场或 dft)和至少 2 种空间类型(体积、表面)。我需要保存所有这些东西,并在它们之间建立关联。所以我认为拥有这些事物的映射是明智的,当事物相互关联时,它们在映射中具有相同的键。

为简单起见,我们只考虑三个地图。

在我的程序过程中,我需要实例化一个SensorInterface. 为此,我需要知道我有多少个麦克斯韦传感器,然后遍历麦克斯韦传感器并获取其他传感器的成员。

这看起来像:

所以阅读器中的函数应该如下所示:

所以...这是意图std::advance(maxwellSensors.begin(), index);但是这不会与此错误代码一起编译:

那么如何推进标准地图的迭代器呢?

我也试过auto maxIt = maxwellSensors.begin() + index;但没有运气。

并且:我想避免像这样的 for 循环:

还有其他可能吗?提前谢谢了!

0 投票
1 回答
726 浏览

c++ - std::advance of std::multimap end() 迭代器由负数崩溃

我的应用程序在此操作中崩溃:

这是崩溃的消息:

问题是什么?

编辑:当我只写 -1 而不是-(mm.size() - 7)它没有崩溃时,为什么?请考虑当我调试 mm.size() 时为 8。

编辑2:当我写std::advance(it, -(static_cast<int>(scoresMap.size()) - 7));它的时候。这是因为multimap的大小类型,但仍然无法猜测是什么原因。

0 投票
4 回答
293 浏览

c++ - C++ - 如何在自定义模板数据容器中的迭代器上启用 ADL 与 Advance()?

这是一个容器:

advance(InputIt &, Distance N)为了允许advance()在我的main()via ADL(依赖于参数的查找)中使用,我在上面定义了哪里:

advance()选择了自定义功能而不是std::advance?我已经看到了advance()在迭代器类中定义自定义函数的示例,以及在命名空间中定义自定义函数的示例,其中仅在迭代器类中声明了友谊。启用 ADL 哪个是正确的?在这一点上,关于 SO 的其他示例尚不清楚。

0 投票
1 回答
575 浏览

c++ - 循环中的高级迭代器

有什么理由可以很好地工作吗

这并没有让我得到任何回报?(提前(它,2))

我想制作一个应该跳过某些元素的循环......,以下内容对我不起作用 it++,it++ 和 it+=2。

0 投票
1 回答
159 浏览

c++ - c++:std::advance(一次)进入列表末尾

我从来没有遇到过迭代器的以下问题,所以我真的不知道解决方案可能从哪里开始。我有一个列表“StringOfPearls”,在我执行以下操作之前已对其进行了置换:

回报:

毫无疑问,我只是错过了一些愚蠢的事情,但是有人可以帮助我吗?