while-loop完成一个循环,但需要很长时间才能开始下一个循环

时间:2015-11-23 02:47:18

标签: c++ performance loops time while-loop

我正在用C ++编程并在优化领域实现大规模算法。我有一个很大的while循环,里面有很多东西。循环的条件只是两个整数ab的比较。我用两点来报告时间:

1-当程序到达while循环结束时。

2-当程序在while循环的开头时。

代码如下所示

        while (a<b){
            //Report time at the beginning of the loop
            time_t beginT = time(0);
            char* dtBegin = ctime (&beginT);
            cout << "Time at the beginning of the loop: " << dtBegin << endl;
            .
            .
            . //all of the other functions inside the loop
            //Report time at the end of the loop
            time_t endT = time(0);
            char* dtEnd = ctime (&endT);
            cout << "Time at the end of the loop: " << dtEnd << endl;
        }

当程序到达循环结束时,返回循环开始需要很长时间,即大型输入实例可能需要大约20分钟。我应该强调循环中的所有操作都会被执行并报告时间,这20分钟只是让程序返回到循环的开头。

我想知道这段时间花在了什么上,以及如何减少它?

感谢任何帮助。

P.S。循环中的点表示代码的机密部分,无法共享。

1 个答案:

答案 0 :(得分:3)

您的仪器已损坏,计算循环范围内对象的析构函数在循环结束之外。解决方法很简单:

    while (a<b){
        //Report time at the beginning of the loop
        time_t beginT = time(0);
        char* dtBegin = ctime (&beginT);
        cout << "Time at the beginning of the loop: " << dtBegin << endl;
        {
            .
            .
            . //all of the other functions inside the loop
        }
        //Report time at the end of the loop
        time_t endT = time(0);
        char* dtEnd = ctime (&endT);
        cout << "Time at the end of the loop: " << dtEnd << endl;
    }

现在,循环内部有自己的范围,析构函数在退出该范围时运行,并且它们在循环的迭代中花费的时间被正确地计算。