小生意是做网站还是公众号,手机网站网页设计,网站开发列表,做网站的公司违约怎么处理目录
二#xff0c;全部代码
三#xff0c;设计思路
1. 讨论
2. 关于迭代器文档一个小细节
结语 一#xff0c;前言
如果有小伙伴还未学习普通迭代器#xff0c;请参考这篇文章中的普通迭代器实现。
【STL】list用法试做_底层实现_花果山~~程序猿的博客-CSDN…目录
二全部代码
三设计思路
1. 讨论
2. 关于迭代器文档一个小细节
结语 一前言
如果有小伙伴还未学习普通迭代器请参考这篇文章中的普通迭代器实现。
【STL】list用法试做_底层实现_花果山~~程序猿的博客-CSDN博客 参考list源码这里直接说结果发现源码通过借用普通迭代器来构造反向迭代器。
二全部代码
namespace my_list
{template class Tstruct list_node{list_node(const T data T()): _data(data), _next(nullptr), _prv(nullptr){}T _data;list_node* _next;list_node* _prv;};template class T, class Ref, class Ptrstruct list_iterator{typedef list_nodeT Node;typedef list_iterator T, Ref, Ptr iterator;Node* _node;list_iterator(Node* node): _node(node){}bool operator! (const iterator it){return _node ! it._node;}bool operator(const iterator it){return _node it._node;}iterator operator(){_node _node-_next;return *this;}iterator operator--(){_node _node-_prv;return *this;}iterator operator(int){iterator tmp(*this);_node _node-_next;return *tmp;}Ptr operator*(){return _node-_data;}Ref operator-(){return (operator*());}};template class Iterator, class Ref, class Ptrstruct _reverse_iterator{typedef _reverse_iteratorIterator, Ref, Ptr reverse_iterator;Iterator _cur;_reverse_iterator(const Iterator cur): _cur(cur){}reverse_iterator operator(){--_cur;return *this;}reverse_iterator operator(int){reverse_iterator temp(*this);--_cur;return temp;}reverse_iterator operator--(){_cur;return _cur;}reverse_iterator operator--(int){reverse_iterator temp(*this);_cur;return temp;}// ! bool operator!(const reverse_iterator end){return _cur ! end._cur;}bool operator(const reverse_iterator end){return _cur end._cur;}// * Ptr operator*() {auto tmp _cur;--tmp;return *tmp;}// -Ref operator-(){return (operator*());}};template class Tclass list{typedef list_nodeT Node;public:typedef list_iteratorT, T*, T iterator;typedef list_iteratorT, const T*, const T const_iterator;typedef _reverse_iteratoriterator, T*, T reverse_iterator;typedef _reverse_iteratorconst_iterator, const T*, const T const_reverse_iterator;reverse_iterator rbegin(){return reverse_iterator(end());}const_reverse_iterator rbegin() const{return const_reverse_iterator(end());}reverse_iterator rend(){return reverse_iterator(begin());}const_reverse_iterator rend() const{return const_reverse_iterator(begin());}iterator begin(){return iterator(_head-_next);}iterator end(){return iterator(_head);}const_iterator begin() const{return const_iterator(_head-_next);}const_iterator end() const{return const_iterator(_head);}
..... //list其他成员函数这里就不再赘述了
三设计思路
设计思路比较简单本质上是复用普通迭代器的函数其他重载函数思想跟普通函数差不多。
但这里也有一个比较艺术性的设计 1. 讨论
那这里我们来讨论一下这个反向迭代器是否能给vector使用 答案是肯定的
看图 结论反向迭代器迭代器的适配器。 2. 关于迭代器文档一个小细节
那是不是所有的容器都合适呢
不一定因为容器的普通迭代器最起码要支持--接口比如foward_list就不支持--所以其没有反向迭代器
这里补充一些关于[STL]文档的使用从迭代器功能角度分为三类 1. forward_iterator (单向迭代器) 支持—— 比如 foward_list等等 2. bidirectional_iterator双向迭代器 —— -- 比如 list等 3. radom_access_iterator 随机迭起器 —— -- - 比如vector, deque等 第三中迭代器继承12种 那意义又是什么
意义就是提示在使用迭代器时接口会提示你合适的的迭代器类型。 结语 本小节就到这里了感谢小伙伴的浏览如果有什么建议欢迎在评论区评论如果给小伙伴带来一些收获请留下你的小赞你的点赞和关注将会成为博主创作的动力。