赞
踩
学习这部分知识,需要你了解vector和list的正向迭代器知识以及容器适配器知识,可以阅读我写的另外三篇vector、list、容器适配器 知识的博客!其中list知识内容尤其重要且难度要求很高!
反向迭代器,顾名思义是与正向迭代器相对,作用是反向遍历容器数据!
目录
C++11中加了独立的返回const迭代器的函数,但这篇博客只模拟实现list的const函数重载来返回const迭代器! 具体这些函数请查看cplusplus.com - The C++ Resources Network!
返回值:返回指向容器中最后一个元素(即其反向开头)的反向迭代器!
const修饰的函数返回值:返回const反向迭代器,其指向成员不能被修改!
返回值:返回一个反向迭代器,该迭代器指向容器中第一个元素之前的理论元素
const修饰的函数返回值:返回const反向迭代器,其指向成员不能被修改!
- namespace wyz//与标准库vector区别,自己定义一个命名空间,在里面写!
- {
- template<class T>
- class vector
- {
- public:
- //...
-
- //迭代器
- typedef T* iterator;
- typedef const T* const_iterator;
-
- iterator begin()
- {
- return _start;
- }
- iterator end()
- {
- return _finish;
- }
- const_iterator cbegin()const
- {
- return _start;
- }
- const_iterator cend()const
- {
- return _finish;
- }
-
- private:
- iterator _start;
- iterator _finish;
- iterator _end_of_storage;
- };
反向迭代器是反向遍历容器数据,它也要满足++、--、*、==、!=的功能,只不过它的++是从后往前,--是从前往后。我们很容易可以想到,反向迭代器和正向的功能差不多相同,只不过在++,--的效果相反!vector正向迭代器底层是指针,它的算法迎合基本的逻辑,++向后,--向前!我们无法直接实现让变量++指针减小,--指针增加!所以我们要用到容器适配器,底层我们可以用正向迭代器!反向的效果只要让正向反着来!--让正向++,++让正向--!这样一来我们的遍历就可以实现!也就是说,我们要将反向迭代器封装成类!
下面我们直接上代码:
- template<class iterator, class T>
- struct vector_reverse_iterator
- {
- typedef vector_reverse_iterator<iterator, T> Self;
- public:
- //拷贝构造
- vector_reverse_iterator(iterator s)
- {
- _it = _it;
- }
- Self& operator++()
- {
- --_it;
- return *this;
- }
- Self& operator--()
- {
- ++_it;
- return *this;
- }
- T operator*()
- {
- iterator tmp = _it;
- return *(--tmp);//注意这个返回!
- }
- bool operator!=(Self s)
- {
- return _it != s._it;
- }
- bool operator==(Self s)
- {
- return _it == s._it;
- }
- private:
- iterator _it;
- };
在来看看vector中的反向迭代器的申明与相关函数:
- typedef T* iterator;
- typedef const T* const_iterator;
- typedef vector_reverse_iterator<iterator,T> reverse_iterator;
- typedef vector_reverse_iterator<const_iterator,const T> const_reverse_iterator;
- //正向迭代器
- iterator begin()
- {
- return _start;
- }
- iterator end()
- {
- return _finish;
- }
- const_iterator cbegin()const
- {
- return _start;
- }
- const_iterator cend()const
- {
- return _finish;
- }
- //反向迭代器传参,这里为了与正向对称,直接传_finish和_start
- reverse_iterator rbegin()
- {
- return reverse_iterator(_finish);
- }
- reverse_iterator rend()
- {
- return reverse_iterator(_start);
- }
- //const反向迭代器,不能修改迭代器指向数据!
- const_reverse_iterator crbegin()const
- {
- return const_reverse_iterator(_finish);
- }
- const_reverse_iterator crend()const
- {
- return const_reverse_iterator(_start);
- }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/390781
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。