[英]reverse_iterator adapter
我正在嘗試為我的迭代器和const_iterator類實現反向迭代器適配器,但會有些麻煩。 如果有人可以指導我完成此工作,將不勝感激!
我的想法是我應該能夠從我的rbegin()和rend()函數調用中創建一個反向迭代器
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_;
};
我以前從未使用過這樣的模板,因此很可能我完全誤解了如何使用它們。
由於我可以是迭代器或const_iterator,因此引用和指針的typedef在這兩個類之間有所不同。 未編譯的行如下:
I::reference operator*() const;
I::pointer operator->() const;
如果不能執行I :: reference和I :: pointer,我不確定如何使一個reverse_iterator類同時適用於迭代器和const_iterator。 我還嘗試在這些模板的前面添加模板,因為它們在iterator類(例如)中定義為:
typedef T* pointer;
typedef T& reference;
引用和指針是從屬名稱,因此您必須使用
typename I::reference operator*() const;
typename I::pointer operator->() const;
此外,構造函數應僅接受I
但是,根本不需要編寫此類。 標准庫為此提供了reverse_iterator 。 或者,如果您對此不滿意,還可以使用Boost.ReverseIterator 。
它只需要
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
此外,您忘記為比較運算符提供其他相同類型的反向迭代器。 這是反向迭代器的要求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.