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*
的重載中,返回的是--
的位置的元素。