cin,cout與scanf,printf的速度到底相差多少

昨天在OJ上看到一個很水的題,題意就是兩個遞增序列,輸出合併後新序列的中值。當時也閒來無事,於是決定動手寫寫。剛開始也沒怎麼在意,認爲該題隨便都能AC。可提交的結果卻TLE了,當時就鬱悶了,這算法不可能會有問題啊,不就是一個簡單的歸併而已,我寫的再搓也不可能會TLE啊(小小地自戀一下,哈哈)。我堅信算法肯定是沒問題的,那問題究竟出在哪兒了呢?很快便鎖定問題的癥結在於輸入輸出,其實剛開始並不確定,雖然很早以前就知道cin,cout比scanf,printf要慢,可一直沒在意,認爲即使有差別也不會太大吧,但這次“血淋淋”的事實就是cin,cout就TLC,scanf,printf就AC了。於是,一個問題“cin,cout與scanf,printf速度上的差別到底有多大”便出現在腦海中。晚上跑步的時候,將該問題告訴了霏哥,霏哥測試了cin與scanf,但結果卻大大出乎了我們的預料,cin竟然比scanf快!怎麼回事?這不可能啊,難道霏哥的方法不對,這也不大可能啊(我可是絕對相信霏哥的哦,哈哈)。
    帶着諸多疑問,我決定自己親自測測。於是編寫了如下代碼:
    (1)隨機生成1000000個數,並將它們寫到文件data中
         #include <iostream>
         #include <fstream>
         #include <cstdlib>
         using namespace std;

         const int NUM = 1000000;

         int main()
         {
             ofstream file("data");
             for(int i = 0 ; i < NUM ; i++)
             {
                 file<<rand()<<' ';
                 if((i+1)%20 == 0)
                 file<<endl;
             }
             return 0;
         }
    
     (2)測試cin讀取這1000000個數所用的時間
          #include <iostream>
          #include <ctime>
          #include <cstdio>
          using namespace std;

          const int NUM = 1000000;

          int main()
          {
    
發佈了39 篇原創文章 · 獲贊 20 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章