🌏博客主页: 主页
🔖系列专栏: C++
❤️感谢大家点赞👍收藏⭐评论✍️
😍期待与大家一起进步!
前言
我们要写出一个通用的反向迭代器模拟而且在保证代码简介不繁琐的的情况下,一定程度上使用我们自己模拟的已经封装好的iterator迭代器可以简化许多步骤,首先我们要知道正向迭代器与反向迭代器在位置上的关系文章来源:https://www.toymoban.com/news/detail-619321.html
文章来源地址https://www.toymoban.com/news/detail-619321.html
一、反向迭代器封装(reverseiterator)
1.构造函数
Iterator _it;
ReverseIterator(Iterator it)
//iterator这里回头传的是正向迭代器
:_it(it)
{}
1解引用操作.
typedef ReverseIterator<Iterator, Ref, Ptr> self;
Ref operator*() {
Iterator tmp(_it);
//因为从end()位置开始,所以要先--,
//获得新的位置,但不改变原来的_it
//所以建立一个临时对象对其进行--操作
return *(--tmo);
}
3.->运算符重载
Ptr operator->() {
return &( operator*());
}
4.前置++,后置++
self& operator++() {
--_it;
//举例:从rbegin位置开始,也就是end()位置
//因为此时的位置无效要前一个位置才有效,所以先前置--
//反向迭代器的++就是正向迭代器的--
return *this;
}
self operator++(int) {
self tmp(*this);
--_it;
return tmp;
}
5.前置–,后置–
self& operator--() {
++_it;
return *this;
}
self operator--(int) {
self tmp(*this);
++_it;
return tmp;
}
6.不等号运算符重载
bool operator!=(const self& s)const {
return _it!= s._it;
}
7.完整代码
namespace simulation {
template<class Iterator ,class Ref,class Ptr>
//相当于:
//typedef ReverseIterator<iterator, T&, T*> reverseiterator;
//typedef ReverseIterator<const_iterator, const T&, const T*> const_reverseiterator;
struct ReverseIterator {
Iterator _it;
ReverseIterator(Iterator it)
:_it(it)
{}
typedef ReverseIterator<Iterator, Ref, Ptr> self;
Ref operator*() {
Iterator tmp(_it);
//因为从end()位置开始,所以要先--,
//获得新的位置,但不改变原来的_it
//所以建立一个临时对象对其进行--操作
return *(--tmo);
}
self& operator++() {
--_it;
//举例:从rbegin位置开始,也就是end()位置
//因为此时的位置无效要前一个位置才有效,所以先前置--
//反向迭代器的++就是正向迭代器的--
return *this;
}
self operator++(int) {
self tmp(*this);
--_it;
return tmp;
}
self operator--(int) {
self tmp(*this);
++_it;
return tmp;
}
self& operator--() {
++_it;
return *this;
}
Ptr operator->() {
return &( operator*());
}
bool operator!=(const self& s)const {
return _it!= s._it;
}
};
}
二、rbegin()以及rend()
//先在vctor或者list的头文件中进行重定义
typedef ReverseIterator<iterator, T&, T*> reverseiterator;
typedef ReverseIterator<const_iterator, const T&, const T*> const_reverseiterator;
1.rbeign()
reverseiterator rbegin() {
//反向迭代器的开头对正向迭代器末尾进行操作
return reverseiterator(end());
}
const_reverseiterator rbegin()const {
return const_reverseiterator(end());
}
2.rend()
reverseiterator rend() {
return reverseiterator(begin());
}
const_reverseiterator rend()const {
return const_reverseiterator(begin());
}
到了这里,关于【C++】反向迭代器的模拟实现通用(可运用于vector,string,list等模拟容器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!