我正在编写一个反向迭代器,作为我自己的自定义矢量类的一部分。到目前为止,我所写的内容如下。
class MyVector
{
public:
typedef T value_type;
typedef value_type* pointer;
typedef const value_type* const_pointer;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef pointer iterator;
typedef const_pointer const_iterator;
typedef size_t size_type;
class reverse_iterator
{
private:
iterator iter;
public:
inline reverse_iterator(iterator a=0) : iter(a) {}
inline reverse_iterator(const reverse_iterator& rev_iter) : iter(rev_iter.iter) {}
inline reverse_iterator& operator++()
{
--iter;
return *this;
}
// and remaining other operator functions
};
inline iterator begin (void) { return ((iterator)data_array); }
inline iterator end (void) { return ((iterator)data_array+number_of_elements); }
inline reverse_iterator rbegin(void) { return end()-1;}
inline reverse_iterator rend(void) { return begin()-1;}
//functions for myvector class
}; //end of Myvector class
在上面的类中,iterater只是C风格的指针,而reverse_iterator是类。所以当我做
main()
{
myVector<int> i;
myVector<int>::reverse_iterator rit= i.begin();
}
我的reverse_iterator已使用begin()函数初始化,并且代码正在编译并运行。但这在STL的迭代器和reverse_iterator情况下不会发生。它们阻止了这种初始化。例如:reverse_iterator不允许自己使用begin()函数初始化,而必须使用rbegin()初始化。
那么我该怎么做才能避免这种初始化呢?我应该写一个像STL中一样的不同迭代器吗?而且我认为这是不可能的..请给我一些解决方案...
迭代器和反向迭代器有一些区别。
最明显的是:增加每个迭代器将它们朝相反的方向移动。
不太明显的:回归begin()
是不是一个反向迭代结束。begin()-1
将是。请记住,它end()
表示“一个过去”,因为C ++范围是半开的,即[begin,end)。如果您只是交换begin()
并end()
在反向迭代器中,则反向迭代器将具有范围(开始,结束)。
换句话说,即使迭代器和反向迭代器本身在某些方面兼容,STL容器也具有begin()
和end()
和rbegin()
和的原因是有原因的rend()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句