我正在写一个反向迭代器作为我自己定制的矢量类的一部分。直到现在我写的是如下。STL容器迭代器和C指针迭代器有什么区别
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的被初始化与()开始功能和代码编译和运行。但是,在STL的迭代器和reverse_iterator中不会发生这种情况。他们阻止这种初始化。例如reverse_iterator不允许用开始()函数初始化,它必须用rbegin()初始化。
那么我该怎么做才能避免这种初始化?我应该写一个不同的迭代器,比如STL中的哪一个。我认为这是不可能的写..请给我一些解决方案...
您明确允许将'iterator'转换为'reverse_iterator',因为您已经为后者提供了前者的转换构造函数。删除该构造函数。 – juanchopanza 2014-10-10 06:16:51
如果将代码示例缩减为[MCVE](http://stackoverflow.com/help/mcve),会更容易。很多代码与问题无关,但没有足够的编译。 – juanchopanza 2014-10-10 06:17:56