首頁  >  文章  >  後端開發  >  scanf() 在 C 輸入速度方面總是優於 iostream 嗎?

scanf() 在 C 輸入速度方面總是優於 iostream 嗎?

Patricia Arquette
Patricia Arquette原創
2024-11-19 11:13:02357瀏覽

Does scanf() Always Outperform iostream in C   Input Speed?

scanf() 在 C 表現中能否超越 iostream?

scanf() 提供比 C 中 cin 更快的輸入處理的概念已經引發程式設計師之間的爭論。本文深入研究了這些方法之間的性能比較,檢查了證據並提供了詳細的解釋。

效能測試

為了評估效能差異,一個簡單的程式是建立從標準輸入中讀取數字清單並對它們執行異或運算。 cin 和scanf() 皆在單獨的實作中使用:

  • cin 版本:
#include <iostream>

int main() {
  int parity = 0;
  int x;

  while (std::cin >> x)
    parity ^= x;
  std::cout << parity << std::endl;

  return 0;
}
#include <stdio.h>

int main() {
  int parity = 0;
  int x;

  while (1 == scanf("%d", &x))
    parity ^= x;
  printf("%d\n", parity);

  return 0;
}
scan🎜>scan版本:

結果
  • 使用包含超過3300 萬個隨機數的文件,測量了執行時間:
cin 版本:24.3 秒

scanf 版本:6.4 秒

最佳化注意事項

最佳化注意事項

#include <iostream>

int main() {
  int parity = 0;
  int x;

  std::ios::sync_with_stdio(false);

  while (std::cin >> x)
    parity ^= x;
  std::cout << parity << std::endl;

  return 0;
}

最佳化注意事項

更改編譯器最佳化設定影響最小

    增強的iostream 效能
  • 發現效能差距部分是由於iostream 與C I/O 函數保持同步。透過使用指令std::ios::sync_with_stdio(false) 停用此同步,iostream 的效能顯著提高:
新結果

停用iostream 同步後:

cin 有同步版本:21.9 秒

scanf 版本:6.8 秒cin 無同步版本:5.5 秒cin 無同步版本:5.5 秒cin 無同步版本:5.5 秒cin 無同步版本:5.5 秒 結論證據表明,對於C 中的原始輸入處理​​, scanf() 確實比cin 更快。但是,如果停用 iostream 的同步,iostream 將成為最佳選擇,其效能優於 scanf() 和最佳化的 cin 版本。 因此,雖然 scanf() 在特定場景下可能更快,但 iostream 提供了更好的同步控制以及更廣泛的功能。當速度至關重要時,建議停用 iostream 同步。

以上是scanf() 在 C 輸入速度方面總是優於 iostream 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn