#include<iostream>
using namespace std;
template<class T>
class Myarray{
int m_nTotal;
int m_nValid;//当前长度
T * m_pdata;
public:
Myarray(int nsize=5){
m_pdata=new T[nsize];
m_nTotal=nsize;
m_nValid=0;
}
void Add(T value){
if(m_nValid<m_nTotal){
m_pdata[m_nValid]=value;
m_nValid++;
}
else{ //数组超过预设个数的处理
int i=0;
T * temp=new T[m_nTotal];
for(i=0;i<m_nTotal;i++){
temp[i]=m_pdata[i];
}
delete []m_pdata;
m_nTotal*=2;
m_pdata=new T[m_nTotal];
for(i=0;i<m_nValid;i++){
m_pdata[i]=temp[i];
}
delete []temp;
m_pdata[m_nValid]=value;
m_nValid++;
}
}
T*getrbegin(){return m_pdata+m_nValid-1;}//结尾地址前一位
T*getrend(){return m_pdata-1;}//开头地址前1位
};
template<class T>
class Reiterator{
T *t;
public:
Reiterator(T *a){t=a;}
bool operator!=(Reiterator iter){
return t!=iter.t;
}
void operator++(T a){
t--;
}
T operator*(){
return *t;
}
};
template<class T>
void dis(T start,T End){
for(T i=start;i!=End;i++)
cout<<*i<<" ";
cout<<endl;
}
int main(){
Myarray<int> a; //1 2 3 4 5
for(int i=0;i<5;i++){
a.Add(i+1);
}
Reiterator<int> rbegin0(a.getrbegin());
Reiterator<int> rend0(a.getrend());
dis(rbegin0,rend0); //5 4 3 2 1
return 0;
}
/*思路参考:
Myarray:
1 2 3 4 5
rend rbegin
valid=5
pdata-1 pdata=1 pdata+4 pdata+5
end start
*/
c++练习--反向迭代器的实现
最新推荐文章于 2023-02-15 23:03:24 发布