私はイテレーターと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_;
};
私は前に、このようなテンプレートを使ったことがないので、私はイテレータまたはconst_iteratorのことができますので、私は完全に彼らが...
を使用することができますどのように誤解しています非常に可能性があり、参照とポインタのtypedefは2つのクラスによって異なります。コンパイルされていない行は、これらは以下のとおりです。
I::reference operator*() const;
I::pointer operator->() const;
私は私を行うことができないんだ場合、私はイテレータとconst_iteratorの両方のための1つのreverse_iteratorクラスの作業を行うことができますどのように他わからない::参照し、 I ::ポインタ。あなたは
typename I::reference operator*() const;
typename I::pointer operator->() const;
を使用する必要がありますので、参照してポインタが、依存名で
typedef T* pointer;
typedef T& reference;
+1。 –
あなたが適応しようとしているconst_iteratorの 'const T *'と 'const T&'として定義されたArentポインタ/リファレンス? – gwiazdorrr
'template'はかなり近いです。小道具 – Puppy