网站后台用什么语言合适,哈尔滨关键词排名工具,大学生可以做的网站项目,网站建设免费建站免费源代码一、反向迭代器
在list模拟实现的过程中#xff0c;第一次接触了迭代器的封装#xff0c;将list的指针封装成了一个新的类型#xff0c;并且以迭代器的基本功能对其进行了运算符重载
反向迭代器是对正向迭代器的封装#xff0c;并且体现了泛型编程的思想#xff0c;任意…
一、反向迭代器
在list模拟实现的过程中第一次接触了迭代器的封装将list的指针封装成了一个新的类型并且以迭代器的基本功能对其进行了运算符重载
反向迭代器是对正向迭代器的封装并且体现了泛型编程的思想任意类型的双向迭代器都可以直接复用反向迭代器
本章将把两个迭代器的实现放在一起比对更好的体会迭代器的封装
二、list正向迭代器的模拟实现
详解可以看list模拟实现那一章节这里仅提供一份代码用于对照反向迭代器 templateclass T,class Ref,class Ptrstruct __list_iterator{typedef list_nodeT node;typedef __list_iteratorT, Ref, Ptr self;node* _pnode;__list_iterator(node* p):_pnode(p){}self operator(){_pnode _pnode-_next;return *this;}self operator--(){_pnode _pnode-_prev;return *this;}self operator(int){self tmp(_pnode);_pnode _pnode-_next;return tmp;}self operator--(int){self tmp(_pnode);_pnode _pnode-_prev;return tmp;}Ref operator*(){return _pnode-_data;}Ptr operator-(){return (_pnode-_data);}bool operator!(const self p){return _pnode ! p._pnode;}bool operator(const self p){return _pnode p._pnode;}};
三、反向迭代器的封装实现双向迭代器
反向迭代器的实现是对正向迭代器的封装
1.成员及其初始化
templateclass Iterator,class Ref,class Ptr
struct ReserveIterator
{typedef ReserveIterator self;//重命名方便使用Iterator _it;//成员变量ReserveIterator(Iterator it):_it(it){}
}
2.基本功能的重载
1 和 --
在反向迭代器的概念中反向迭代器就是正向迭代器--
self operator()
{_it--;return *this;
}
self operator--()
{_it;return *this;
}
//前置和--
self operator(int)
{self tmp(*this);_it--;return tmp;
}
self operator--(int)
{self tmp(*this);_it;return tmp;
}
2 ! 和
bool operator!(const self s)
{return _it ! s._it;
}
bool operator(const self s)
{return _it s._it;
}
3 - 和 *
在实现operator*()之前要先理解底层在stl库内的实现为了让begin()和rend(),所在的物理空间上对称但在使用的角度上来看并不对称为了使其对称且不影响使用对*和-的实现作出了调整解引用返回的是其前一个的位置 Ref operator*()
{Iterator tmp(_it);_it--;return *tmp;
}
Ptr operator-()
{Iterator tmp(_it);_it--;return (*_it);
}
3.定义部分 typedef __list_iteratorT, T, T* iterator;typedef __list_iteratorT, const T, const T* con_iterator;typedef ReverseIteratoriterator, T, T* reverse_iterator;typedef ReverseIteratoriterator,const T,const T* con_reverse_iterator;iterator begin(){return iterator(_head-_next);}iterator end(){return iterator(_head);}con_iterator begin()const{return con_iterator(_head-_next);}con_iterator end()const{return con_iterator(_head);}reverse_iterator rbegin(){return reverse_iterator(end());}reverse_iterator rend(){return reverse_iterator(begin());}
总结
本章整理了关于反向迭代器的相关内容以及模拟实现