STL iterator的自己实现

来源:互联网 发布:android源码 小米商城 编辑:程序博客网 时间:2024/04/30 08:40
return *this;inline bool floatEq(float a, float b){float c=a-b;if(c>1e-5 || c<-1e-5){return false;}return true;}class Range{floatmax_;float min_;float step_;float current_;public:class iterator{const Range& r_;float v;public:explicit iterator(const Range& r):r_(r){}inline iterator&    operator++(){v += r_.step_;                        return *this;}    inline float operator*() const{ return v; };    inline bool operator== (const iterator& rhs) const{    return floatEq(rhs.v,v);    }    inline bool operator!= (const iterator& rhs) const{    return !(floatEq(rhs.v,v));    }    inline void setValue(float value){ v=value; }};public:Range(){}Range(float max, float min, int steps){if(max>min){max_=max;min_=min;}else{max_=min;min_=max;}step_ = (max_-min_)/(float)(steps);current_ = min_;};inline floatround(const float& v)const{float vv;if(v>max_)vv=max_;else if(v<min_)vv=min_;else{int cc=round_c((v-min_)/step_);vv = min_+cc*step_;}return vv;}inline iterator begin()const{iterator it(*this);it.setValue(min_);return it;}inline iterator end()const{iterator it(*this);it.setValue(max_);return it;}inline float current()const{ return current_; }inline void setCurrent(float v){ current_=round(v); }};


上面是一段代码用于定义范围参数,并提供了iterator 方便遍历。