作者:爱写代码的刚子
时间:2023.9.5
前言:本篇博客主要介绍反向迭代器的实现,通过对正向迭代器的复用以及模版的使用来实现反向迭代器。
namespace test
{
template<class iterator,class Ref,class Ptr>
struct __reverse_iterator
{
typedef __reverse_iterator<iterator,Ref,Ptr> Self;
iterator _it;
//构造函数
__reverse_iterator(iterator it)
:_it(it)
{}
// 运算符重载
Ref operator*()
{
iterator tmp(_it);
return *(--tmp);
}
Ptr operator->()
{
return &(operator*());
}
Self& operator--()
{
++_it;
return *this;
}
Self& operator++()
{
--_it;
return *this;
}
bool operator!=(const Self& l) const{
return _it!=l._it;
}
};
}
引入iterator模版参数,与vector、list等容器的iterator实现基本相同,但是对it指针的处理相反。在使用模拟实现的reverse_iterator时需要传入对应的类型,并使用typedef。例:vector中:
以vector举例:
注意函数名和传入参数的不同!在实现reverse_iterator时也要注意
由于reverse_iterator复用了iterator的部分逻辑,实现大体相同。(提供的示例代码中后置++和–的运算符重载没有提供实现)