问题标签 [reverse-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++ - 从 C++ 中的集合中删除最后一个元素
在水平线之间的代码中,我试图从集合中删除最后一个元素。
当我写s.erase( s.rbegin( ) ) 而不是s.erase( --s.end( ) )时,它给了我一个编译错误说:
不是 s.rbegin() 和 --s.end() 指向同一个元素吗?
c++ - 对 reverse_iterator 的 C++20 更改会破坏此代码吗?
以下代码在 C++11、C++14 和 C++17 中编译,但在 C++20 中不编译。对标准的哪些更改破坏了此代码?
错误很长,但可以总结为:
模板参数必须是一个完整的类
c++ - 在自定义反向向量迭代器中看不到第一个元素
前几天我想尝试为向量编写自己的迭代器,当然,这是最原始的例子,因为 c++ 标准中有很多令人困惑的代码。因此,正向向量的常用迭代器工作正常,但反向迭代器存在问题。我将它完全建立在基本迭代器上,只是我专门为反向迭代器更改/反转了运算符。
从 Vector 访问迭代器:
问题本身在于,当我尝试以相反的方向遍历所有元素时VectorRevIterator
。当试图将所有这些输出到控制台时,它似乎将一个元素向前移动并且看不到/无法读取第一个元素的字符。但是然后输出所有元素,只有没有最后一个。
这里有一个例子:
如何解决这个问题?要制作反向迭代器,只需还原运算符++
--
+=
-=
和rBegin
rEnd
函数。或者也许我忘记了什么?
c++ - 我对带有 reverse_iterator 的“push_back()”有疑问
我预计输出是“abcba”,但 push_back() 中似乎有错误。谁来帮帮我T_T
c++ - 为什么阻止将反向迭代器 .rbegin() 用作要擦除的元素的位置?
a 的反向迭代器std::map.rbegin()
返回包含 a 中最大 key_type 的元素的位置std::map
。
可以使用返回的位置访问具有最大 Key 的元素,map.rbegin()
如下所示:
map.rbegin()->first
但是返回的位置map.rbegin()
不能用来擦除这个元素。
为什么我可以访问但不能删除相同的位置?
在我看来,如果一个函数/方法需要一个迭代器来获得一个位置,那么它是什么类型的迭代器并不重要。
如果该迭代器描述的不仅仅是一个位置(例如方向,也......),事情会有所不同
注意:我没有问“如何使用反向迭代器调用擦除? ”,我在代码的最后一行提供了这个操作的解决方案。
我在问为什么我不能用反向迭代器擦除。std::map::reverse_iterator
即,std::map:iterator
如果 STL 只需要使用它来获取要擦除的一个元素的位置,为什么不简单地将其转换为。
c++ - 我应该增加还是减少反向迭代器?
如此处给出的,向后迭代列表的一种好方法是使用rbegin()
,如下所示:
不幸的是,我不记得是++iter
还是--iter
。因为我们正在倒退,所以使用--iter
对我来说也是合乎逻辑的。
我正在寻求一个直观的解释,以便我可以永远记住它。我不想每次都查。
c++ - std::reverse_iterator 如何在开始之前保存一个?
这是一个代码示例,使用std::reverse_iterator
:
当std::reverse_iterator
用作另一个迭代器的适配器时,新适应的end应该是原始begin之前的一个。但是调用std::prev
开始是UB。
开始前怎么std::reverse_iterator
办?
c++ - `std::filesystem::path` 没有反向迭代器?
为什么std::filesystem::path
不提供反向迭代器(即rbegin
和rend
)有技术原因吗?
如果我有一个std::filesystem::path
for/a/b/c/b/d/b/e
并且我想找到第一个匹配的组件b
,我可以使用std::find(p.begin(), p.end(), fs::path("b"))
.
但是如果我想找到匹配的最后一个组件b
,我不能只切换到反向迭代器。我可以编写自己的循环,但看起来这将是一个“几乎免费”实现的常见操作。
接口的设计是否会导致难以提供反向迭代器?
c++ - vector::reverse_iterator 在调试模式下出错,但在发行版中没有
我使用 reverse_iterator 查找我的向量并使用 pop_back 擦除元素。但它在调试模式下会导致一些错误。我的代码是这样的: