??博客主頁: 主頁
??系列專欄: C++
??感謝大家點贊??收藏?評論??
??期待與大家一起進步!
前言
我們要寫出一個通用的反向迭代器模擬而且在保證代碼簡介不繁瑣的的情況下,一定程度上使用我們自己模擬的已經(jīng)封裝好的iterator迭代器可以簡化許多步驟,首先我們要知道正向迭代器與反向迭代器在位置上的關系文章來源:http://www.zghlxwxcb.cn/news/detail-619321.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-619321.html
一、反向迭代器封裝(reverseiterator)
1.構造函數(shù)
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++】反向迭代器的模擬實現(xiàn)通用(可運用于vector,string,list等模擬容器)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!