给定的两个代码之间有啥区别。一个在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 &lt;&lt; "ffdfdf";,因为它会知道循环没有做任何事情。

一旦您将错误的bools 替换为as,以便第二个sn-p 实际编译,建议您将new[] 调用与delete[] 配对。

【讨论】:

感谢额外的信息......但即使我尝试在第一个程序的循环中放入一些执行语句,它也很容易编译

以上是关于给定的两个代码之间有啥区别。一个在ideone上运行时超出时间限制,另一个工作正常[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Days 和 TotalDays 之间有啥区别? [关闭]

编码/解码有啥区别?

编码/解码有啥区别?

世博会:世博构建和世博上传有啥区别

多表继承模型和相同两个模型之间的简单一对一关系有啥区别?

DFT 和 FFT 之间有啥区别使 FFT 如此之快?