反向迭代器实际上就是在正向迭代器的基础上将其转换一下就变成了反向的,里面会传一个迭代器模板,这个模板随便是谁的迭代器模板,可以是list的,vector的等等,其只要有一个模板,引用了正向迭代器,其他SLT类型都可以用这个反向迭代器,这也是类型的力量,泛型就是这么强大。
反向迭代器的模拟实现
反向迭代器需要传一个迭代器模板,因为什么类型都可以用这个反向迭代器,包括list,vector等等这些。而他的成员函数就是一个迭代器类型的容器。而它不需要拷贝构造,赋值重载,直接用自己生成的,因为迭代器指针只是指向一块已经存在的空间,他的赋值和构造都是浅拷贝。
template<class Iterator>//可以是任意类型的迭代器--适配器模式
class reverse_iterator
{
public:
reverse_iterator()
:_it(it)
{}
private:
Iterator _it;//指针类型的迭代器变量
}
反向迭代器和正向迭代器实现的功能一样,需要解引用,!=,++等这些函数,我们一一实现
【解引用*和->】
operator*取前一个位置,主要就是为了让反向迭代器的开始和结束跟正向迭代器对称