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

c++ - 如何使用 difference_type 按任何值增加/减少 reverse_iterator

我正在尝试使用 reverse_iterator 从反向位置擦除列表的特定项目。但在 stl_iterator.h 头文件中发生编译错误。

我正在尝试做...

这里 input[] 是一个整数数组。

在 stl_iterator.h 文件中显示错误...

我需要从该列表的后端/末尾开始擦除特定项目。这仅用于优化或降低时间复杂度。

0 投票
0 回答
42 浏览

c++ - 为什么使用 std::reverse_iterator 时有不同的尊重返回类型?

我正在尝试为容器实现一个迭代器和一个反向迭代器,但是,这两个迭代器的返回类型是不同的。

与迭代器相关的代码:

与用例相关的代码:

旁注:ActivePtr 上的一元 * 确实返回 T&。也许这可能影响了 std::reverse_iterator 对确定返回类型的判断?

除了定义我自己的反向迭代器之外,还有其他解决方法吗?我希望反向迭代器仍然返回一个 ActivePtr,就像原来的迭代器一样。谢谢你。

0 投票
3 回答
100 浏览

c++ - C++ iterate container backwards N steps

In C++ I can use reverse_iterator to loop elements of container, say, list, backwards.

How do I iterate over a certain number of elements? Not reaching the beginning? This code works, but I feel there is a better way.

Expected output {5, 4, 3}.

0 投票
1 回答
2399 浏览

c++ - c++11反向迭代器和lower_bound

我有以下示例程序:

当我执行它时,我得到这个输出:

我有两个问题。首先是为什么++a.rbegin()--a.rbegin()迭代在同一个方向?a.rbegin()迭代器不是从双向迭代器返回的吗?

第二个问题是为什么a.lower_bound(6)->first返回 8 而不是 5?基于https://en.cppreference.com/w/cpp/container/map/lower_bound,它应该返回一个迭代器到第一个元素“不小于键”。所以我会认为 5 会因为 8 > 6 而返回。

0 投票
2 回答
125 浏览

c++ - 从迭代器构造的反向迭代器是它的前一个迭代器吗?

https://en.cppreference.com/w/cpp/iterator/reverse_iterator上,据说:

std::reverse_iterator是一个迭代器适配器,它反转给定迭代器的方向。换句话说,当提供双向迭代器时,std::reverse_iterator会生成一个新迭代器,该迭代器从底层双向迭代器定义的序列的末尾移动到开头。

r对于从 iterator 构造的反向迭代器i,关系&*r == &*(i-1)始终为真(只要r是可解引用的);因此,从一个过去的迭代器构造的反向迭代器取消对序列中最后一个元素的引用。

所以我尝试了这段代码来了解更多:

输出:

为什么迭代器的值相同但地址不同???!!!

这是否意味着&*r == &*(i-1)不正确?

0 投票
2 回答
92 浏览

c++ - 为什么 2 个未初始化的 std::set::iterator 相等?

std::set<>::iterator未初始化时,它等于集合中的任何其他迭代器,但它等于其他未初始化的迭代器。

这是特定于 GCC 的实现吗?(未初始化的迭代器实际上是否初始化为无效值?)

印刷:

现场示例:https ://onlinegdb.com/r1--46u_B

0 投票
1 回答
54 浏览

java - 无法解决Java Deque 迭代Bug

在我进行测试时,我发现了我的代码中的错误。

我很难找到我的Deque迭代器出了什么问题。它没有正确迭代,我不知道如何修复它。我已经包含了失败测试的屏幕截图和我完成的代码。

附注:我的教授希望迭代器在向前迭代或反向迭代时从头部出列元素,这就是为什么迭代器更难弄清楚的原因。

失败的单元测试截图: https ://imgur.com/a/srlmrNQ

非常感谢你的帮助!

完整的源代码:

0 投票
1 回答
484 浏览

c++ - 从向量中擦除元素 – rbegin() 与 begin()

我正在尝试解决 C++ 中的一个问题,其中一部分需要我使用rbegin()成员函数从向量中擦除元素。但是,每次我编写下面提到的代码时,编译器都会抛出一个错误。这里有什么问题?

错误:

但是,如果我使用begin()成员函数访问相同的元素,它编译得很好。下面的代码工作正常。

0 投票
3 回答
62 浏览

c++ - 反转依赖于 end() 的迭代器

假设我想编写一个双向迭代器,它迭代任何提供begin()/ end()/ rbegin()/的容器的所有非零值rend()。我将不得不重写operator++()以跳过它遇到的所有零。为了确保它仍然有效,它必须每次都检查end()容器rend()。以下内容:

现在,我想做一个使用的反向迭代器,NonZeroIterstd::reverse_iterator要做到这一点,我必须在每次检查rend()NonZeroIter检查end(),反之亦然。有没有一种很好的方法(如果可能的话避免开销),还是我必须编写自己的相应反向迭代器类?

0 投票
2 回答
95 浏览

c++ - 我可以使用反向迭代器作为 ForwardIt 吗?

基于这个问题std::rotate定义如下:

查看名称ForwardIt,它需要前向迭代器。

问题:假设我的初始集合支持正向迭代器(例如vector),我可以在这里使用反向迭代器吗?为什么/为什么不?

例如,查看 http://www.cplusplus.com/reference/iterator/reverse_iterator/,我不明白返回的内容是否被视为前向迭代器。我是否必须保证反向迭代器满足正向迭代器的属性?在这种情况下,我如何检查它是否属实?vector::rbegin()文档没有提到是否是这种情况。