【发布时间】:2014-02-12 01:17:57
【问题描述】:
我有一个基于模板的自定义集合(因为我们不能在界面上使用 std::vector)。我想实现一个特定于这个集合的 reverse_iterator。下面的反向迭代器结构是嵌套在集合类中的结构。已经实现了一个迭代器(基本上是一个指向集合元素类型的指针)。这是我第一次尝试反向迭代器。
template <typename T>
struct reverse_iterator
{
typedef T::iterator iterator;
typedef T& reference;
inline reverse_iterator(const iterator & it):_it(it){}
inline reverse_iterator() : _it(0x0) {}
inline iterator base() const {iterator it = _it; return --it;}
inline reverse_iterator operator ++ () {return reverse_iterator(--_it);}
inline reverse_iterator operator -- () {return reverse_iterator(++_it);}
inline reverse_iterator operator ++ (int val) {_it -= val; return reverse_iterator(_it);}
inline reverse_iterator operator -- (int val) {_it += val; return reverse_iterator(_it);}
inline reverse_iterator operator += (int val) {_it -= val; return reverse_iterator(_it);}
inline reverse_iterator operator -= (int val) {_it += val; return reverse_iterator(_it);}
inline reverse_iterator operator + (int val) const {iterator it = _it - val; return reverse_iterator(it);}
inline reverse_iterator operator - (int val) const {iterator it = _it + val; return reverse_iterator(it);}
bool operator == (const iterator & other) const {return other == base();}
bool operator != (const iterator & other) const {return other != base();}
reference operator*() const {return *base();}
iterator operator->() const {return base();}
private:
iterator _it;
};
- 这是可行的 reverse_iterator 还是我遗漏了什么?
- 可以改进吗?
【问题讨论】:
-
由于我无法控制的原因无法使用标准类型。