分享

Sitr单链表迭代子类的实现

 BUPT-BYR 2010-12-20
单链表迭代子类的实现:
template<typename T>
struct Sitr {
typedef T value_type; //T的别名;
typedef Snode<T> Node; //节点类型的别名; 
Node* me_; //结点指针me;
Sitr(Node* p = 0):me_(p){ } //构造函数;
Sitr(Sitr const& rhs):me_(rhs.me_){ } //拷贝构造函数;
Sitr& operator=(Sitr rhs) { //对赋值运算符=的重载;  
this->me_ = rhs.me_;
return *this;
}
T& operator*(void) { return me_->value_; } //对*重载; 
T* operator->(void) { return &(me_->value_);}//对->重载;
Sitr& operator++(void) { //++前缀;
me_ = me_->next_;
return *this;
}
/**********************************************/ 

符合STL规范的实现:
template<typename T>
struct Sitr
: std::iterator<std::forward_iterator_tag, T>
{
typedef Snode<T> Node;
Node* me_ ; //指向当前节点的指针;
Sitr(Node* p = 0) : me_(p) { }
T& operator*(void) { return me_->value_; }
T* operator->(void){ return &(me_->value_); }
bool operator!=(Sitr const& lhs) const
{ return me_ != lhs.me_; }
bool operator==(Sitr const& lhs) const
{ return me_ == lhs.me_; }
Sitr& operator++(void)
{ //前缀运算符;
me_ = me_->next_;
return *this;
}
Sitr operator++(int)
{ //后缀运算符;
Sitr tmp = *this;
++*this;
return tmp;
}
};
Sitr operator++(int) { //++后缀;
Sitr tmp = *this;
++*this;
return tmp;
}
bool operator!=(Sitr const& rhs) const //对!=重载;
{ return me_ != rhs.me_; }
bool operator==(Sitr const& rhs) const //对==重载;
{ return me_ == rhs.me_; }
};

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多