问题标签 [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.

0 投票
2 回答
215 浏览

c++ - 从 C++ 中的集合中删除最后一个元素

在水平线之间的代码中,我试图从集合中删除最后一个元素。

当我写s.erase( s.rbegin( ) ) 而不是s.erase( --s.end( ) )时,它给了我一个编译错误说:

不是 s.rbegin() 和 --s.end() 指向同一个元素吗?

0 投票
1 回答
174 浏览

c++ - 对 reverse_iterator 的 C++20 更改会破坏此代码吗?

以下代码在 C++11、C++14 和 C++17 中编译,但在 C++20 中不编译。对标准的哪些更改破坏了此代码?

错误很长,但可以总结为:

模板参数必须是一个完整的类

0 投票
1 回答
118 浏览

c++ - 在自定义反向向量迭代器中看不到第一个元素

前几天我想尝试为向量编写自己的迭代器,当然,这是最原始的例子,因为 c++ 标准中有很多令人困惑的代码。因此,正向向量的常用迭代器工作正常,但反向迭代器存在问题。我将它完全建立在基本迭代器上,只是我专门为反向迭代器更改/反转了运算符。

从 Vector 访问迭代器:

问题本身在于,当我尝试以相反的方向遍历所有元素时VectorRevIterator。当试图将所有这些输出到控制台时,它似乎将一个元素向前移动并且看不到/无法读取第一个元素的字符。但是然后输出所有元素,只有没有最后一个。

这里有一个例子:

如何解决这个问题?要制作反向迭代器,只需还原运算符++ -- += -=rBegin rEnd函数。或者也许我忘记了什么?

0 投票
1 回答
52 浏览

c++ - 我对带有 reverse_iterator 的“push_back()”有疑问

我预计输出是“abcba”,但 push_back() 中似乎有错误。谁来帮帮我T_T

0 投票
1 回答
267 浏览

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 只需要使用它来获取要擦除的一个元素的位置,为什么不简单地将其转换为。

0 投票
1 回答
115 浏览

c++ - 我应该增加还是减少反向迭代器?

如此处给出,向后迭代列表的一种好方法是使用rbegin(),如下所示:

不幸的是,我不记得是++iter还是--iter。因为我们正在倒退,所以使用--iter对我来说也是合乎逻辑的。

我正在寻求一个直观的解释,以便我可以永远记住它。我不想每次都查

0 投票
1 回答
82 浏览

c++ - std::reverse_iterator 如何在开始之前保存一个?

这是一个代码示例,使用std::reverse_iterator


std::reverse_iterator用作另一个迭代器的适配器时,新适应的end应该是原始begin之前的一个。但是调用std::prev开始是UB

开始前怎么std::reverse_iterator办?

0 投票
1 回答
118 浏览

c++ - `std::filesystem::path` 没有反向迭代器?

为什么std::filesystem::path不提供反向迭代器(即rbeginrend)有技术原因吗?

如果我有一个std::filesystem::pathfor/a/b/c/b/d/b/e并且我想找到第一个匹配的组件b,我可以使用std::find(p.begin(), p.end(), fs::path("b")).

但是如果我想找到匹配的最后一个组件b,我不能只切换到反向迭代器。我可以编写自己的循环,但看起来这将是一个“几乎免费”实现的常见操作。

接口的设计是否会导致难以提供反向迭代器?

0 投票
1 回答
37 浏览

c++ - vector::reverse_iterator 在调试模式下出错,但在发行版中没有

我使用 reverse_iterator 查找我的向量并使用 pop_back 擦除元素。但它在调试模式下会导致一些错误。我的代码是这样的:

0 投票
0 回答
22 浏览

iterator - 在迭代或反向迭代时在 std:set 中插入元素

关于std::set,我理解文档说“插入成员不应影响迭代器的有效性和对容器的引用”。请看下面,反向迭代器(左代码)通过插入值 50 被修改,而标准迭代器(右代码)不受相同插入的影响。我想每个人都希望这两个代码块做同样的事情,但事实并非如此。左边的代码打印50在最后一行,而右边的代码打印49. 有什么解释吗?标准和反向迭代器