计算两个等差数列的更好方法

Better way to calculate two arithmetic progressions?

本文关键字:等差数列 更好 方法 两个 计算      更新时间:2023-10-16

作为c++ 2d直方图类的一部分,我必须计算x和y值的bin向量。我是这样做的;

    double xInc = (xMax - xMin)/xBins;
    double yInc = (yMax - yMin)/yBins;
    for(int i = 0; i<(xBins+1); i++){ m_xVals[i] = xMin + i*xInc; }
    for(int i = 0; i<(yBins+1); i++){ m_yVals[i] = yMin + i*yInc; }

我在algorithms中错过了一些可以更简洁地做到这一点的东西吗?或者,有没有一种方法可以把它变成一个循环,而不会被控制语句超越?

嗯,如果您觉得必须这样做,您可以使std::iota投入使用(实例):

class FloatingIota {
public:
  FloatingIota(double start, double inc)
    : start_(start), inc_(inc), n_(0) {}
  FloatingIota& operator++() { ++n_; return *this; }
  operator double() const { return start_ + n_ * inc_; }
private:
  double start_;
  double inc_;
  int n_;
};
std::iota(m_xVals, m_xVals + (xBins+1), FloatingIota(xMin, xInc));
std::iota(y_xVals, m_yVals + (yBins+1), FloatingIota(yMin, yInc));

我把它留给你来决定在什么程度上这是"更简洁",因为这是旁观者的眼睛