C++的反向迭代器
1.反向迭代器
反向迭代器(Reverse Iterator)是一种特殊的迭代器,用于反向遍历容器(从尾元素到首元素)。它本质上是对普通迭代器的封装,通过调整迭代器的递增 / 递减行为实现反向遍历。
rbegin()
:返回指向容器最后一个元素的反向迭代器(反向遍历的起点)。
rend()
:返回指向容器首元素前一个位置的反向迭代器(反向遍历的终点,类似于普通迭代器的 end()
)。
rbegin()
指向4
(最后一个元素),*rbegin() = 4
。++rbegin()
会指向3
(向前移动一位)。rend()
指向1
的前一个位置(无效位置),与普通迭代器的end()
类似(不指向任何元素)。- 遍历循环
for (auto it = rbegin(); it != rend(); ++it)
会依次访问4, 3, 2, 1。
2.反向迭代器的模拟实现
#pragma once
namespace my
{
template<class Iterator, class Ref, class Ptr>
class ReverseIterator
{
typedef ReverseIterator<Iterator, Ref, Ptr> Self;
public:
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& s) const
{
return _it != s._it;
}
private:
Iterator it;
};
}