【发布时间】:2014-12-05 05:50:26
【问题描述】:
我正在编写一个反向迭代器作为我自己的自定义向量类的一部分。到目前为止,我写的内容如下。
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
在上面的类迭代器只是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 中一样。而且我认为不可能写出来..请给我一些解决方案...
【问题讨论】:
-
您明确允许将
iterator转换为reverse_iterator,因为您已经为后者提供了从前者转换的构造函数。删除该构造函数。 -
如果您将代码示例简化为MCVE,会更容易。很多代码与问题无关,但编译不够。
标签: c++ stl iterator containers