【问题标题】:Increment variable on every call of method每次调用方法时递增变量
【发布时间】:2019-01-24 04:35:09
【问题描述】:

我有这个方法:

void Session::onNewImage(cv::Mat& img, double elapsedTime){
    static int count = 0;
    add(img, dnnOutput[count++], curLati, curLongi, curAlti, curHeading, curRoll);
}

它被调用了 1400 次。每次“count”的值递增。但是当它在 1401 时间出现时,我希望“计数”变为 0 ,然后再次增加形式。我不希望“计数”成为全局变量。我怎样才能做到这一点?

附:我无法将其硬编码为 1400。每次都可能不同。还有另一种方法决定调用该方法的次数,具体取决于作为该方法输入的图像数量。

【问题讨论】:

  • if ( count > 1400 ) count = 0;?
  • 使用 %(模数)运算符。
  • 那个值,1400,是dnnOutput的大小吗?那是数组还是向量?
  • 很抱歉给出“其中一个”cmets,但也许您最好解释一下您想要实现的目标。您寻求的实际解决方案可能不在此特定功能的细节中,而是在您的实现的整体设计中。显然,您在此方法中访问的类中有一些状态,并且您对该状态进行了假设;该状态与您的 count 变量有何不同?
  • 赶上@odyss-jii 和以前的cmets:假设最大计数是sizeof dnnOutput,可能是std::vector<...>,那么你可以做e。 G。 count = (count + 1) % dnnOutput.size();。到目前为止还好。但是,如果您从 0 重新开始,您是否确保在重新使用之前对图像进行的任何处理都完成?或者至少,如果newImage(0) 和newImage(1400) 重复使用相同的数据,就不会发生冲突?

标签: c++ loops variables increment


【解决方案1】:

应该这样做:

void Session::onNewImage(cv::Mat& img, double elapsedTime){
    static int count = 0;

    if (count >= getYourCountLimitFromSomewhere())
        count = 0;

    add(img, dnnOutput[count++], curLati, curLongi, curAlti, curHeading, curRoll);
}

请注意,正如@Aconcagua 在 cmets 中指出的那样,count 与阈值的比较是通过> 还是>= 取决于getYourCountLimitFromSomewhere() 返回值的含义。

【讨论】:

  • 其实我更喜欢这个比我的模数建议,我觉得它更清楚。我只是懒惰。
  • 当我看到% 的建议时,我发现它比这种简单的方法更好:) 不过,您在可读性方面可能是对的。
  • 好吧,我忘了提。我无法将其硬编码为 1400。每次都可能不同。
  • 但是最大值是多少。那么指定的调用次数呢?
  • 剩下一个问题:问题说“循环应运行 1400 次,第 1401 次运行应以 0 重新开始” - 假设循环运行的计数是从 1 开始的,我们将不得不比较 if(count >= 1400),而不是 @ 987654328@ 和以前一样。因此,如果限制函数返回大小(在数组/向量的情况下),而不是最大值,我们也必须在这里与>= 进行比较。好的,打开函数实际返回的内容,但我们必须牢记这一点......
猜你喜欢
  • 2021-01-03
  • 2023-04-09
  • 1970-01-01
  • 2018-04-18
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多