有没有办法在c ++中使用动态for循环?

时间:2018-04-02 05:44:44

标签: c++ loops

所以我正在开展一个需要我进行模拟的项目。问题是需要完成的模拟次数取决于先前模拟的结果。它有点像递归,除了没有要调用的函数。第一个的模拟是通过for循环完成的。这给了一个数字。然后,我需要重复该模拟,直到该数字为0。

最好只显示代码然后尝试解释它我想。

for(int i = 0; i < newnumber; i++)
{
    for(int i = 0; i < 5; i++)
    {
       //some probability loops
       newnumber++;
    }
}
//don't worry, I have some math that will make the new number 
// go down over time so the loop will eventually come to a stop

如果我有这样的问题,我该怎么做呢?我已经可以看到问题是你为什么要这样做,答案是,我需要做一个疾病传播模拟。当一个人受到感染时,他们有可能感染另一个人。在我编写newnumber ++的地方,我也写了一些概率循环。被感染的百分比很低,因此循环不能扩展,但如果确实如此,我需要再次为感染者运行概率函数,因为现在他们有可能感染其他人。我该如何做这样的事情?

我尝试了一个while循环,但这只是让我无限循环,所以我不知道如何解决这样的问题。

1 个答案:

答案 0 :(得分:1)

当然,您可以更改任何(非const)变量的值,无论它是否在for循环的条件部分中使用。因此,你可以有一个for循环。

但我建议不要编写这样的for循环。 for循环通常用于必须重复某些事情的情况下(当时)循环开始)次数。像你建议的那样改变条件需要跟踪循环体内所用变量的任何变化,这可能是调试的噩梦。

您可以使用do {} while循环更清楚地陈述您的意图。 Example

#include <iostream>
#include <random>

constexpr int INITIALLY_INFECTED = 42;
constexpr double INFECTION_RATE = 0.8;

int main() {
    std::random_device rd;
    std::mt19937 gen(rd());
    int newlyInfected = INITIALLY_INFECTED;
    int totalInfected = 0;
    do {
        totalInfected += newlyInfected;
        newlyInfected = std::binomial_distribution<>(newlyInfected, INFECTION_RATE)(gen);
        std::cout << "New infections: " << newlyInfected
            << "\ntotal now: " << totalInfected << std::endl;
    } while (newlyInfected > 0);
}

这使您可以更清楚地说明意图:

  

[..]我需要再次为被感染的人运行概率函数,因为现在他们有可能感染别人[...]

在这里你说是否进行了新的模拟运行取决于是否有一些(新的)感染者。 newlyInfected > 0几乎说明了这一点。 i < newnumber没有。