STL iterator的自己实现

来源:互联网 发布:用友软件好用吗 编辑:程序博客网 时间:2024/04/30 12:10
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 方便遍历