使用 list::size() 后运行时间显著增加
Significant runtime increase after employing list::size()
我有一个巨大的代码大小。我最近添加了一些新代码,在我添加新的简单 if 语句之前,它工作正常。添加此 add 语句后,运行时增加了 100 倍,这是无稽之谈。
我的代码的某些部分如下。if语句terminate_ongoing函数中添加,即使我删除if语句中的所有内容,程序仍然很慢。但是如果我评论这个 if 语句,它会再次变得很快。
if 语句是
if ( emitted_vulnerable_list.size() > 100000 ){
}
如您所见,我删除了里面的所有内容,但问题没有解决。您能否提供一些提示以找到问题的根源并解决问题。
class flip_flop_vulnerable_time{
public:
list <vulnerable_time> emitted_vulnerable_list;
list <vulnerable_time> ongoing_vulnerable_list;
void terminate_ongoing(int PO, int minimum_delay , int cycle, long long elimination_time){
for (list<vulnerable_time>::iterator it=ongoing_vulnerable_list.begin(); it!=ongoing_vulnerable_list.end(); it++){
if ( it-> PO_signal_number == PO && it->cycles_passed == cycle && it->min_delay == minimum_delay ){
it-> elimination_time = elimination_time;
if ( cycle == 0 && elimination_time - it->appearance_time < 500 )
ongoing_vulnerable_list.erase(it);
else{
emitted_vulnerable_list.splice(emitted_vulnerable_list.end(),ongoing_vulnerable_list, it);
if ( emitted_vulnerable_list.size() > 100000 ){
}
}
return;
}
}
cout<<"tError: can't find the following ongoing vulnerable_time object"<<endl;
exit(0);
}
// Some other functions here
};
gcc 中的 list::size() 实现是 O(n) 和庞大的列表中,多次调用此函数可能非常耗时。
list::size() 的问题在于您使用的是 list::splice(),并且除非计算移动的项目,否则无法跟踪列表大小。 但是使用两个变量手动跟踪大小看起来并不难。
相关文章:
- KMP算法和LPS表构造的运行时间
- 如何计算Big-O表示法中的平均渐近运行时间
- 用时钟测量程序的运行时间
- 如何减少代码的运行时间以对齐文本?
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- 使用 Qt 测量过程的实际运行时间
- 如何执行用 C++ 编写的程序的运行时间?
- 无限运行时间
- 如何优化C++键值程序以获得更快的运行时间
- 这个算法的运行时间复杂度是多少?你是如何分析的
- 两个嵌套循环的运行时间复杂性:二次型还是线性
- 重复值的最长运行时间
- 同一程序的运行时间差异很大,有时达到1000+us
- 测量 OpenCL 应用程序的运行时间
- 为什么以相同的数量插入到集合中,基于不同的方法具有不同的运行时间?
- variadic函数模板:基于n编译时值在运行时间自动n输入
- 霓虹灯增加了运行时间
- 使用 list::size() 后运行时间显著增加
- 为什么更改循环迭代顺序会增加运行时间
- 动态内存分配会增加运行时间吗?