我正在寫一個反向迭代器作爲我自己定製的矢量類的一部分。直到現在我寫的是如下。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