我正在尝试为我的迭代器和 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_;
};
我以前从未使用过这样的模板,所以很可能我完全误解了它们的使用方式......
由于 I 可以是迭代器或 const_iterator,因此引用和指针的 typedef 在两个类之间会有所不同。未编译的行是这些:
I::reference operator*() const;
I::pointer operator->() const;
如果我不能执行 I::reference 和 I::pointer,我不确定如何使一个 reverse_iterator 类同时适用于迭代器和 const_iterator。我还尝试在这些前面添加模板,因为它们在迭代器类(例如)中定义为:
typedef T* pointer;
typedef T& reference;