我想爲我的迭代器和const_iterator類實現一個反向迭代器適配器,但有點麻煩。如果任何人能指導我通過這個,那將不勝感激!reverse_iterator適配器
的想法是,我應該能夠從我的rbegin創建反向迭代器()和雷德()函數調用
reverse_iterator rbegin();
reverse_iterator rend();
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;
我使用下面的typedef在類:
typedef btree_iterator<T> iterator;
typedef const_btree_iterator<T> const_iterator;
typedef reverse_btree_iterator<iterator> reverse_iterator;
typedef reverse_btree_iterator<const_iterator> const_reverse_iterator;
如您所見,我希望能夠使用模板創建反向迭代器,爲reverse_iterator類提供迭代器或const_iterator。
不幸的是,這一點我卡上...
下面是類的定義,我現在有,有錯誤。
template <typename I> class reverse_btree_iterator {
typedef ptrdiff_t difference_type;
typedef bidirectional_iterator_tag iterator_category;
public:
reverse_btree_iterator() : base_(I()) {}
template <typename T> reverse_btree_iterator(const btree_iterator<T>& rhs) : base_(rhs) {}
I base() { return base_; }
I::reference operator*() const;
I::pointer operator->() const;
I& operator++();
I operator++(int);
I& operator--();
I operator--(int);
bool operator==(const I& other) const;
bool operator!=(const I& other) const;
private:
I base_;
};
我以前從未使用過的模板就是這樣,所以它很可能我完全誤解他們是如何可用於...
因爲我可以是一個迭代器或常量性,在typedef的引用和指針在兩個類之間有所不同。未編譯行是這些:
I::reference operator*() const;
I::pointer operator->() const;
我不知道我還能怎麼做一個reverse_iterator的類工作Iterator和常量性,如果我不能做我::參考,並我::指針。我也試過在那些前添加模板,因爲它們在迭代器類(例如)定義爲:
typedef T* pointer;
typedef T& reference;
勇敢的+1。 –
在你試圖去適應的const_iterator中定義爲'const T *'和'const T'的Arent指針/引用? – gwiazdorrr
'模板'非常接近。道具。 – Puppy