第一个代码:工作正常,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";
}
谁能解释为什么这两个代码片段有很大的时差。我不明白。
bool[i]=new bool[n];
非常昂贵,参见其他语句。
一个好的编译器会优化你的第一个程序cout << "ffdfdf";
,因为它会知道循环不做任何事情。
一旦您将错误的bool
替换为a
s,以便实际编译第二个代码段,建议您将new[]
调用与delete[]
配对。