Skip to content

Latest commit

 

History

History
48 lines (30 loc) · 1.82 KB

cin-cout-vs-scanf-printf.rst

File metadata and controls

48 lines (30 loc) · 1.82 KB

cin/cout v.s. scanf/printf

結論:在相同的條件下,cin/cout 會比 scanf/printf 快。

理論依據:scanf/printf 使用了 format string 處理字串,而全都是 runtime 的行為。

就算 printf("%d", n) 已經固定, %d 仍需要在每次執行時重新 parse。

cin/cout 透過 operator overloading,用變數的型別直接決定行為。

造成 cin/cout 效能低落的原因

  • cin/cout 預設會和 stdin/stdout 同步
    • 若不做同步,cin/cout 和 scanf/printf 就不能混用
  • std::endl 會將緩衝區(buffer)清空
  • cin/cout 預設會綁定在一起
    • cout 的緩衝區在 cin 時會被清空

以上三點都會造成頻繁的 I/O,造成效能下降。

要注意這些「多餘」的步驟都是有原因的; 例如把 cin/cout 解除綁定以後,cout 就不會在 cin 時清空, 你在 cout 出「請輸入一個數字」以後 cin,使用者也不會看到這些字。

解除 cin/cout 與 scanf/printf 的同步

ios_base::sync_with_stdio(false);

去除 std::endl

cout << n << endl; 換成 cout << n << '\n';

解除 cin/cout 綁定

cin.tie(0);

來源

C++的輸出入cin/cout和scanf/printf誰比較快?