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{ float max_; 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 float round(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 方便遍历。
STL iterator的自己实现
最新推荐文章于 2022-05-09 17:25:36 发布