【发布时间】:2014-01-09 10:01:14
【问题描述】:
假设您有一个实际上是代理并包含它返回的数据的迭代器,您如何创建反向迭代器?
解引用运算符的std::reverse_iterator 实现创建一个临时对象,然后递减和解引用,代码如下:
reference operator*() const {
iterator tmp = current;
return *--tmp;
}
结果它返回给你的是一个指向数据的指针,在你得到它之前就超出了范围。
这带来了相当不幸的结果。
你怎么能解决这个问题?
【问题讨论】:
-
你的意思是你的迭代器拥有它应该返回的对象(它不是与代理相反)吗?
-
将
reverse_iterator与“代理迭代器”一起使用是非法的,因为它需要一个双向迭代器,并且它们的operator*必须返回一个T cv&。 -
@nikitoz 我目前正在查看的迭代器被描述为“像代理一样”,所以是的,它可能不是代理。是的,取消引用返回了迭代器拥有的东西。
-
@Simple 迭代器是双向的,
operator*返回一个T cv &
标签: c++ iterator reverse-iterator