一.反向迭代器大致实现

cpp
#pragma once
template<class Iterator>
struct ReverseIterator
{
ReverseIterator(Iterator it)
:_it(it)
{}
Iterator _it;
};
二.重载一系列操作符
cpp
#pragma once
template<class Iterator,class Ref,class Ptr>
struct ReverseIterator
{
typedef ReverseIterator<Iterator,Ref,Ptr> Self;
ReverseIterator(Iterator it)
:_it(it)
{}
Ref operator*()
{
return *_it;
}
Ptr operator->()
{
return &(*_it);
}
Self& operator++()
{
--_it;
return *this;
}
Self& operator--()
{
++_it;
return *this;
}
bool operator!=(const Self& it)
{
return _it != it._it;
}
bool operator==(const Self& it)
{
return _it == it._it;
}
Iterator _it;
};

三.构造一个list的反向迭代器


然后就能实现我们的rbegin()和rend()了

1.rbegin()的实现
cpp
reverse_iterator rbegin()
{
return reverse_iterator(--end());
}
2.rend()的实现
cpp
reverse_iterator rend()
{
return reverse_iterator(end());
}
3.测试
cpp
void test_list7()
{
ltw::List<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(4);
ltw::List<int>::reverse_iterator rit = lt.rbegin();
while (rit != lt.rend())
{
cout << *rit << " ";
++rit;
}
cout << endl;
}

上面这个是库里面的实现(但是,我们发现这不就错了吗)

这里纯粹是为了对称,所以这样实现
四.和库里面实现的一样
cpp
#pragma once
template<class Iterator,class Ref,class Ptr>
struct ReverseIterator
{
typedef ReverseIterator<Iterator,Ref,Ptr> Self;
ReverseIterator(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& it)
{
return _it != it._it;
}
bool operator==(const Self& it)
{
return _it == it._it;
}
Iterator _it;
};
这样,我们的list里面也要进行修改
cpp
reverse_iterator rbegin()
{
return reverse_iterator(end());
}
reverse_iterator rend()
{
return reverse_iterator(begin());
}
const版本是一样的
cpp
const_reverse_iterator rbegin() const
{
return const_reverse_iterator(end());
}
const_reverse_iterator rend() const
{
return const_reverse_iterator(begin());
}
vector也是和list是一样的,这里就不进行写了