簡體   English   中英

reverse_iterator適配器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM