一.反向迭代器大致实现#pragma once templateclass Iterator struct ReverseIterator { ReverseIterator(Iterator it) :_it(it) {} Iterator _it; };二.重载一系列操作符#pragma once templateclass Iterator,class Ref,class Ptr struct ReverseIterator { typedef ReverseIteratorIterator,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()的实现reverse_iterator rbegin() { return reverse_iterator(--end()); }2.rend()的实现reverse_iterator rend() { return reverse_iterator(end()); }3.测试void test_list7() { ltw::Listint lt; lt.push_back(1); lt.push_back(2); lt.push_back(3); lt.push_back(4); ltw::Listint::reverse_iterator rit lt.rbegin(); while (rit ! lt.rend()) { cout *rit ; rit; } cout endl; }上面这个是库里面的实现(但是,我们发现这不就错了吗)这里纯粹是为了对称,所以这样实现四.和库里面实现的一样#pragma once templateclass Iterator,class Ref,class Ptr struct ReverseIterator { typedef ReverseIteratorIterator,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里面也要进行修改reverse_iterator rbegin() { return reverse_iterator(end()); } reverse_iterator rend() { return reverse_iterator(begin()); }const版本是一样的const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }vector也是和list是一样的,这里就不进行写了