cin cout 快速輸入輸出(效率優化)

2021-08-26 16:11:21 字數 1124 閱讀 1937

在這裡,我不得不糾正大家以為iostream很慢的這樣乙個以訛傳訛流毒無窮的錯誤觀念。

大家觀察到的iostream慢,通常都是因為c++需要保持對c的io library相容,所以c++的io library是沒有buffer的,而且必須乙個字元乙個字元來讀取!

比如說有人蛋疼這麼寫:

getline(cin, s);

scanf("%d", &i);

這 裡getline只能乙個字元乙個字元讀取,假如它一次讀了100個字元,只用到了10個,剩下的90個沒辦法放回stdin裡面,這樣下面的scanf 就是從錯誤的位置讀取的。所以c++的library為了相容c,不得不乙個字元乙個字元讀取。這樣就導致c++的iostream比較慢。

好在這個行為是可以設定的。cin.sync_with_stdio(false); 這樣就會讓c++的iostream變快了。當然你如果這麼做你得保證沒有用到c的io library。

下面是測試:

[***@yyy ~]$ cat testcio.c && gcc -o3 testcio.c -o testcio.out

#include

int main(int argc, char** argv)

}[***@yyy ~]$ cat testcxxio.cpp && g++ -o3 testcxxio.cpp -o testcxxio.out

#include

using namespace std;

int main(int argc, char** argv)

[***@yyy ~]$ time for ((i = 0; i < 10; i++)); do ./testcio.out < some_text; done

...........

real 0m7.170s

user 0m0.957s

sys 0m1.623s

[***@yyy ~]$ time for ((i = 0; i < 10; i++)); do ./testcxxio.out < some_text; done

...........

real 0m7.123s

user 0m0.742s

sys 0m1.737s

兩者的速度是一致的。

cin cout 快速輸入輸出(效率優化)

在這裡,我不得不糾正大家以為iostream很慢的這樣乙個以訛傳訛流毒無窮的錯誤觀念。大家觀察到的iostream慢,通常都是因為c 需要保持對c的io library相容,所以c 的io library是沒有buffer的,而且必須乙個字元乙個字元來讀取!比如說有人蛋疼這麼寫 getline ci...

iostream輸入輸出流 cin cout

cin是istream類的物件,即c 的標準輸入流物件。主要用於從鍵盤等輸入裝置上讀取資料。其常用的讀取資料流的方法有 cin cin.get cin.getline 1 cin 方式 1 該方式每次讀取資料流時,一旦遇到空格 換行符,則其後的內容都被捨棄無法讀取。只能讀取這些分隔符之前的內容。且首...

快速輸入輸出

由於c 自帶的scanf有時候會被卡,自己寫一下輸入輸出會讓程式快很多,下面我用的是fread加速讀入.fread的速度是scanf,cin關同步指標的幾十倍,是普通read的2倍.讓程式跑得更快.為了看的時候方便,我把這些封裝在乙個namespace裡面,要用的時候呼叫就可以了.下面是 1 nam...