我正在用C ++编程并在优化领域实现大规模算法。我有一个很大的while循环,里面有很多东西。循环的条件只是两个整数a
和b
的比较。我用两点来报告时间:
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。循环中的点表示代码的机密部分,无法共享。
答案 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;
}
现在,循环内部有自己的范围,析构函数在退出该范围时运行,并且它们在循环的迭代中花费的时间被正确地计算。