嗯,我知道为什么,是因为没有转化,但是为什么没有转化呢?为什么正向迭代器可以变成反向迭代器,但反之则不行?更重要的是,如果我想这样做,我该怎么办?是否有一些适配器允许您使用前向迭代器向后迭代?
std::vector<int> buffer(10);
std::vector<int>::iterator forward = buffer.begin();
std::vector<int>::reverse_iterator backward = buffer.rbegin();
++forward;
++backward;
std::vector<int>::iterator forwardFromBackward = std::vector<int>::iterator(backward); // error! Can't convert from reverse_iterator to iterator!
std::vector<int>::reverse_iterator backwardFromForward = std::vector<int>::reverse_iterator(forward); // this is fine
您可以编写一个辅助函数。其特殊性之一是reverse_iterator
就是它base()
给出一个正向迭代器,它是反向迭代器取消引用的值的下一个.这是因为反向迭代器物理上指向元素after那个它逻辑上指着 https://stackoverflow.com/a/14760316/111307。因此,要使前向迭代器与反向迭代器相同,您需要递减以下结果base()
由一,or你可以增加反向迭代器first,然后取.base()
的。
这两个示例如下所示:
#include <iostream>
#include <vector>
#include <iterator>
//result is undefined if passed container.rend()
template <class ReverseIterator>
typename ReverseIterator::iterator_type make_forward(ReverseIterator rit)
{
return --(rit.base()); // move result of .base() back by one.
// alternatively
// return (++rit).base() ;
// or
// return (rit+1).base().
}
int main()
{
std::vector<int> vec(1, 1);
std::vector<int>::reverse_iterator rit = vec.rbegin();
std::vector<int>::iterator fit = make_forward(rit);
std::cout << *fit << ' ' << *rit << '\n';
}
警告:此行为与reverse_iterator(iterator)
构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)