假设您有一个迭代器,它实际上是一个代理并包含它返回的数据,您如何制作反向迭代器?
解引用运算符的 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/