C++反向迭代器
反向迭代器是用正向迭代器适配实现的,本质是写一个反向迭代器的类模板,给编译器传不同的容器的正向迭代器实例化,编译器去实例化出各种类模板对应的反向迭代器。
#pragma once
namespace my_reverse_iterator
{template<class Iterator, class Ref , class Ptr>struct ReveraseIteraotr{typedef ReverseIteraotr<Iterator, Ref, Ptr> Self;Iterator _it;ReveraseIteraotr(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){return _it != s._it;}};
}
operator*
中不直接--_it
的原因是:迭代器是用来访问的,不应该在内部对它进行更改,所以需要一个临时变量。
反向迭代器和正向迭代器的起始位置和结束位置是对称的,正向迭代器的end是指向最后一个元素的下一个位置(即尾插的位置),那么反向迭代器的rend指向的是第一个元素的前一个位置(即头插的位置)。所以operator*
的重载中,返回的是--
的位置的元素。