c++ - 如何将反向迭代器与作为代理的迭代器一起使用

标签 c++ iterator reverse-iterator

假设您有一个迭代器,它实际上是一个代理并包含它返回的数据,您如何制作反向迭代器?

解引用运算符的 std::reverse_iterator 实现创建一个临时对象,然后递减和解引用,代码如下:

  reference operator*() const {
    iterator tmp = current;
    return *--tmp;
  }

结果是它返回给您的是一个指向数据的指针,该数据在您获取数据之前就超出了范围。

这有相当不幸的结果。

你怎么能绕过这个?

最佳答案

由于您的迭代器类型与 reverse_iterator 的这一特定实现不兼容,因此您似乎需要为这种特定情况编写自己的自定义反向迭代器实现。

根据 http://en.cppreference.com/w/cpp/iterator/reverse_iterator ,一些实现也存储迭代器的递减拷贝,但不是全部。 Boost::reverse_iterator 似乎没有存储额外的拷贝。

关于c++ - 如何将反向迭代器与作为代理的迭代器一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21016943/

相关文章:

c++ - 如何遍历非线性容器

java - 二叉搜索树的迭代器不沿着树向下

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

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

c++ - STL 算法的反向迭代

c++ - CMake:将 GTest 添加到构建中

c++ - 参数声明中的 "const T const"

Android 标准和 STL 支持

python - 给定一个字典迭代器,得到字典

java - 在我的 "Custom Set"实现中需要帮助