cin與scanf cout與printf效率問題

2021-08-20 19:32:23 字數 951 閱讀 3865

在競賽中,遇到大資料時,往往讀檔案成了程式執行速度的瓶頸,需要更快的讀取方式。相信幾乎所有的c++學習者都在cin機器緩慢的速度上栽過跟頭,於是從此以後發誓不用cin讀資料。還有人說pascal的read語句的速度是c/c++中scanf比不上的,c++選手只能乾著急。難道c++真的低pascal一等嗎?答案是不言而喻的。乙個高階的方法是把資料一下子讀進來,然後再轉化字串,這種方法傳說中很不錯,但具體如何從沒試過,因此今天就索性把能想到的所有的讀資料的方式都測試了一邊,結果是驚人的。

從上面可以看出幾個問題:

1. linux平台上執行程式普遍比windows上快;

2. windows下vc編譯的程式一般執行比mingw(minimal gcc for windows)快;

3. vc對cin取消同步與否不敏感,前後效率相同。反過來mingw則非常敏感,前後效率相差8倍;

4. read本是linux系統函式,mingw可能採用了某種模擬方式,read比fread更慢。

在acm裡,經常出現資料集超大造成 cin tle的情況。這時候大部分人(包括原來我也是)認為這是cin的效率不及scanf的錯,甚至還上公升到c語言和c++語言的執行效率層面的無聊爭論。其實像上文所說,這只是c++為了相容而採取的保守措施。我們可以在io之前將stdio解除繫結,這樣做了之後要注意不要同時混用cout和printf之類。

cin cout效率沒scanf printf高為何用 ,主要有以下幾個原因:

1. 流輸入輸出對於基本型別來說使用很方便,不用手寫格式控制字串;

2. 對於標準庫的一些class來說,顯然過載操作符也比自己寫格式控制字串要方便很多;

3. 對於複雜的格式可以進行自定義操作符;

4. 可讀性更好(這個很多人有不同意見,見仁見智了)。

**:

C 之 cin 與 !cin 的原理分析

在判斷檔案開啟成功與否或是連續從流中讀取資料時,就要用到對流對像的操作,比如if cin 或是 whie cin 等等。while cin val 我們都知道 cin 是乙個流物件,而 運算子返回左邊的流物件,也就是說 cin val 返回 cin,於是 while cin val 就變成了 whi...

C 輸入與輸出 cin與cout

輸入輸出不是由c 本身定義的,而是在編譯系統提供的i o庫中定義的,用 流 stream 的方式實現的 有關流物件cin cout和流運算子的定義等資訊是存放在c 的輸入輸出流庫中的,故如果在程式中使用cin cout和流運算子,就必須使用預處理命令把頭檔案stream包含到本檔案中 include...

C與C 學習 cin與cout

二 cout 總結cin與cout是c 中的輸入和輸出函式,使用時需要新增標頭檔案 include iostream 和 using namespace std 相比c語言 cin 與 cout 不需要像 scanf 和 printf 那樣指定輸入和輸出格式,也不需要取位址運算子 就可以直接輸入或輸...