问题标签 [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.
c++ - 如何实现 std::advance 以更改迭代器类型的行为?
我们所知道std::advance
的如下:
目的
i
按n
元素推进迭代器。
如果i
是随机访问迭代器,则该函数使用一次operator+
or operator-
,否则,该函数重复使用递增或递减运算符 ( operator++
or operator--
),直到n
元素被推进。
我的问题如下:如何std::advance
实现以识别是否it
是随机访问迭代器?它怎么知道它可以使用operator+
而不是operator++
?
c++ - std 或 boost 中是否有类似 circular_advance 的东西?
假设我想以循环方式通过容器:
idx = 0, idx =1 .. idx = size()-1, idx =0, idx =1 ...
有没有办法使用 std 或 boost ?我知道算法不是在容器上运行的,所以我猜我运气不好,但我只是想检查一下。
PS不需要手动实现,这很简单(如果你不忘记seq点:P),只需
c++ - 推进标准地图的迭代器
主要问题已经在标题中:如何推进标准地图的迭代器?
但是由于大多数人问我为什么需要这个,我将提供更多信息:我有一个有几个地图的类。我至少有 2 个微分方程、至少 2 种传感器类型(场或 dft)和至少 2 种空间类型(体积、表面)。我需要保存所有这些东西,并在它们之间建立关联。所以我认为拥有这些事物的映射是明智的,当事物相互关联时,它们在映射中具有相同的键。
为简单起见,我们只考虑三个地图。
在我的程序过程中,我需要实例化一个SensorInterface
. 为此,我需要知道我有多少个麦克斯韦传感器,然后遍历麦克斯韦传感器并获取其他传感器的成员。
这看起来像:
所以阅读器中的函数应该如下所示:
所以...这是意图std::advance(maxwellSensors.begin(), index);
但是这不会与此错误代码一起编译:
那么如何推进标准地图的迭代器呢?
我也试过auto maxIt = maxwellSensors.begin() + index;
但没有运气。
并且:我想避免像这样的 for 循环:
还有其他可能吗?提前谢谢了!
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的大小类型,但仍然无法猜测是什么原因。
c++ - C++ - 如何在自定义模板数据容器中的迭代器上启用 ADL 与 Advance()?
这是一个容器:
advance(InputIt &, Distance N)
为了允许advance()
在我的main()
via ADL(依赖于参数的查找)中使用,我在上面定义了哪里:
并advance()
选择了自定义功能而不是std::advance
?我已经看到了advance()
在迭代器类中定义自定义函数的示例,以及在命名空间中定义自定义函数的示例,其中仅在迭代器类中声明了友谊。启用 ADL 哪个是正确的?在这一点上,关于 SO 的其他示例尚不清楚。
c++ - 循环中的高级迭代器
有什么理由可以很好地工作吗
这并没有让我得到任何回报?(提前(它,2))
我想制作一个应该跳过某些元素的循环......,以下内容对我不起作用 it++,it++ 和 it+=2。
c++ - c++:std::advance(一次)进入列表末尾
我从来没有遇到过迭代器的以下问题,所以我真的不知道解决方案可能从哪里开始。我有一个列表“StringOfPearls”,在我执行以下操作之前已对其进行了置换:
回报:
毫无疑问,我只是错过了一些愚蠢的事情,但是有人可以帮助我吗?