1.反向迭代器
迭代器有两种,一种是正向的,一种是反向的,方向迭代器的主要功能就是实现数据的反向访问,通过正向迭代器的适配生成的,适配器就是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。
2.反向迭代器的原理
反向迭代器就是通过正向迭代器的适配构成的,所以反向迭代器的++就是正向迭代器的--,反向迭代器的--就是正向迭代器的++。
3.反向迭代器实现
namespace sss
{
template<class iteratorr,class Ref,class Ptr>
struct reverse_iterator
{
iterator _it;
typedef template<iteratorr, Ref, Ptr> self;
reverse_iterator(iterator& it)
:_it(it)
{
;
}
//*的重载
Ref operator*()
{
iterator tmp = _it;
return *--tmp;
}
//->重载
Ptr operator->()
{
return &(operator*());
}
//前置++重载
self& operator++()
{
--_it;
return *this;
}
//后置++重载
self& operator++(int)
{
iterator tmp = _it;
--tmp;
return tmp;
}
//前置--重载
self& operator--()
{
++_it;
return *this;
}
//后置--重载
self& operator--(int)
{
iterator tmp = _it;
++tmp;
return tmp;
}
//==重载
bool operator==(const itrtator& S)
{
return _it == S._it;
}
//!=重载
bool operator!=(const itrtator& S)
{
return _it != S._it;
}
};
//通过正向迭代器的适配,生成反向迭代器
//实现一个正向迭代器来完成
typedef reverse_iterator<iterator, T&, T*> reverse_iterator;
typedef reverse_iterator<const_iterator, const T&, const t*> const_reverse_iterator;
reverse_iterator rbegin()
{
return reverse_iterator(end());
}
const_reverse_iterator rbegin()
{
return reverse_iterator(end());
}
reverse_iterator rend()
{
return reverse_iterator(rbegin());
}
const_reverse_iterator rend()
{
return reverse_iterator(rbegin());
}
}