在這裡,我不得不糾正大家以為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...