问题标签 [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 回答
229 浏览

c++11 - 为什么范围解析不超出课程范围?

我正在尝试为使用双向迭代器的容器编写一个通用的反向包装器,使用std::reverse_iterator.

但是,似乎当编译器查找begin(...)orend(...)时,它会说找不到匹配的函数调用,reverse_wrapper<CONTAINER>::begin(container)因为候选者需要 0 个参数,但提供了 1 个参数。

我会猜到这是因为std::begin(myArray&)并且std::end(myArray&)不存在。强制他们进入std命名空间是行不通的(无论如何也不可取)。我也尝试std::从我的中删除前缀,reverse_wrapper但这没有用,并且还会破坏工作std容器的实现。

这似乎是一个范围解析问题,但我似乎无法得到修复。我究竟做错了什么?

代码:

错误:

Demo

0 投票
3 回答
1088 浏览

c++ - 编译器无法在 Vector_const_iterator 和 Vector_iterator 之间“转换”,即使两者的方法都可用

我正在尝试围绕 std::vector 创建一个小型包装类来表示多项式的系数。调用者需要能够遍历系数,但我不想公开底层实现。

使用此处此处和其他地方描述的模式,我尝试传递迭代器,如下所示:

然后这些 gf255_poly 对象被用在如下方法中:

虽然看起来很简单,但类型有问题。Visual Studio 在 for 循环中给了我这个错误,我似乎无法弄清楚:

我不明白这条消息 -我提供了返回迭代器和 const_iterators 的方法。为什么编译器不能在它们之间进行选择?


这个问题的隐含意义是,这是否是一个向调用者隐藏细节的好策略(因为他们仍然必须处理这些 std::vector 类型),我将不胜感激也能解决这个问题的答案。

0 投票
1 回答
154 浏览

c++ - 变量中的 reverse_iterator 和迭代器抽象

我有一个方法应该map根据条件向前或向后迭代。操作本身独立于方向,因此我希望能够做这样的事情:

我知道我应该能够使用模板函数来做到这一点(对吧?),但这似乎有点过头了。

有没有一种方法可以在没有模板的情况下在一个函数中完成?也许使用<algorithm>?

0 投票
2 回答
776 浏览

python - What's the difference between a reversed tuple and a reversed list?

Reversing a tuple and reversing a list returns objects of different type:

They have the same dir. Neither type is a subclass of the other.

Why is that? What can one do that the other can't?

0 投票
3 回答
130 浏览

c++ - 如何使用矢量::reverse_iterator 有一个元素

我将 poll() 与 std::vector 一起使用。注册监听套接字。

并添加新的客户端套接字或连接的客户端会话做一些事情。

但是当向量元素为 1 或 2 或 4 时,reverse_iterator 无法正常工作。我不明白为什么会这样。

附上示例代码。

结果:

如果vector有5个元素,它可以正常工作。

0 投票
1 回答
39 浏览

c++ - 收藏中倒数第二名的模板;reverse_iterator 无法编译

std::map我正在将两个现有函数转换为模板,它们检查迭代器是否是 a 中的最后一项和倒数第二项。isLastItem模板编译,isSecondLastItem失败并显示我不明白的错误消息。

导致错误的一行是typename T::reverse_iterator secondLastIt = collection.rbegin();

但是模板和非模板版本看起来是一样的。

编译器错误:

0 投票
6 回答
2845 浏览

c++ - 在自定义容器类上反转基于范围的 for 循环

我正在尝试通过移植Sedgewick 和 Wayne的Algorithms, 4th Edition中的主要示例来提高我的 C++ 技能。我根据他们的 Java示例编写了一个通用堆栈实现。

我的堆栈工作正常,但我想提高性能,但在尝试编写反向迭代器时遇到了困难。

...

我尝试切换上面的beginandend成员函数,但发现扩展的 for 循环总是随着 递增++__begin,即使__end位于较低的内存地址。我们如何才能i反向循环(相对于堆栈的 LIFO)?

如果有严重的错误或看起来过时的方面,请随时评论我的代码风格。我想与优秀的“现代”C++ 保持一致。

0 投票
1 回答
4614 浏览

iteration - Julia中的反向迭代

昨天我有机会想以相反的顺序迭代一个集合。我找到了这个reverse函数,但这并没有返回一个迭代器,而是实际上创建了一个反向集合。

显然,曾经有一个Reverse迭代器,它在几年前被删除了。我还可以找到对某些东西(一种类型?)的引用Order.Reverse,但它似乎不适用于我的问题。

Iterators.jl包有许多有趣的迭代模式,但显然没有反向迭代。

我当然可以使用该reverse函数,并且在某些情况下,例如reverse(eachindex(c))它返回一个反向迭代器,但我更喜欢通用反向迭代器。

有这样的事吗?

0 投票
1 回答
969 浏览

c++ - C++ reverse_iterator 错误

我正在尝试为我的向量使用 reverse_iterator,显然这行代码导致 3 个错误。

错误:

  1. 预期一个';'
  2. 错误 C2146 语法错误:缺少 ';' 在标识符“rit”之前
  3. 错误 C2065 'rit':未声明的标识符

我正在使用 Visual Studio 2015 控制台应用程序。

0 投票
1 回答
77 浏览

c++ - Gnu 的 reverse_iterator::operator-> 和代理迭代器

我已经意识到,根据 [reverse.iter.opref]中的 C++-14 标准,reserver_iterator<Iterator>::operator->必须等同于:

而在 C++11 中(链接到同一部分)是:

std::addressof是在 C++11 中添加的,所以可以在这里使用。我认为这可能只是后来纠正的缺陷。

但是,GLIBCXX 的反向迭代器(gcc 版本 6.2.0)的实现遵循 C++14 之前的定义:

在该句子中的使用operator&允许代理迭代器operator&reference类型上重载,以便在需要时为其迭代器提供正确的语义。所以,也许 gcc 并没有假设这reference将是前向迭代器案例的真正参考,因为标准要求。

gcc 是否明确允许代理迭代器(毕竟它们通常可以工作)?其他编译器做同样的事情吗?