给定的两个代码之间有啥区别。一个在ideone上运行时超出时间限制,另一个工作正常[关闭]
Posted
技术标签:
【中文标题】给定的两个代码之间有啥区别。一个在ideone上运行时超出时间限制,另一个工作正常[关闭]【英文标题】:What's the difference between the given two codes. One gives time limit exceeded when run on ideone and the other works fine [closed]给定的两个代码之间有什么区别。一个在ideone上运行时超出时间限制,另一个工作正常[关闭] 【发布时间】:2018-01-14 22:52:42 【问题描述】:第一个代码:工作正常,0 秒时间成功
int main()
int n=100000;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cout<<"ffdfdf";
第二个代码:给出一个超出的时间限制
int main()
int n=100000;
bool **a=new bool*[n];
for(int i=0;i<n;i++)
bool[i]=new bool[n];
for(int j=0;j<n;j++)
bool[i][j]=1;
cout<<"ffdfdf";
谁能解释为什么这两个代码片段有很大的时间差异。我不明白。
【问题讨论】:
这两个代码完全不同。第二个使用new
,这非常昂贵,而第一个没有,并且您在第二个中分配了大量内存,
数十亿次什么都不做通常比分配大块内存数十亿次要快得多。
在第一个程序中,一个好的编译器将能够将其全部优化掉。在第二个程序中,您写入了很多内存位置。
您的第二个代码格式不正确,bool
是 c++ 中的保留标识符。
我投票结束这个问题,因为第二个程序甚至没有编译。
【参考方案1】:
bool[i]=new bool[n];
是非常昂贵的参考。其他语句。
一个好的编译器会将你的第一个程序优化为cout << "ffdfdf";
,因为它会知道循环没有做任何事情。
一旦您将错误的bool
s 替换为a
s,以便第二个sn-p 实际编译,建议您将new[]
调用与delete[]
配对。
【讨论】:
感谢额外的信息......但即使我尝试在第一个程序的循环中放入一些执行语句,它也很容易编译以上是关于给定的两个代码之间有啥区别。一个在ideone上运行时超出时间限制,另一个工作正常[关闭]的主要内容,如果未能解决你的问题,请参考以下文章