簡體   English   中英

交替的cin / cout很慢?

[英]Alternating cin/cout is slow?

首先,我正在做std::ios_base::sync_with_stdio(false) 我有以下幾段代碼,從文本文件中讀取一百萬個整數( <input.txt >output.txt ):

int tests;
cin >> tests;
for (int i = 0; i < tests; ++i) {
  int number;
  cin >> number;
  cout << number << "\n";
}

int tests;
cin >> tests;
vector<int> numbers(tests);
for (int i = 0; i < tests; ++i) {
  cin >> numbers[i];
}
for (int i = 0; i < tests; ++i) {
  cout << numbers[i] << "\n";
}

當然,實際上他們所做的不僅僅是打印相同的數字。 問題是,第一個塊大約需要4倍(6.2秒對1.8)。

在兩種情況下,使用printf / scanf重寫相同的代碼需要3秒。 這背后的原因是什么?

請參閱std::basic_ios::tie ,特別是這些部分:

綁定流是一個輸出流,它與流緩沖區( rdbuf() )控制的序列同步,也就是說,在*this進行任何輸入/輸出操作之前,在綁定流上調用flush()

默認情況下,標准流cincerrclogcout綁定。 同樣,他們廣泛的同行wcinwcerrwclogwclog聯系wcout

關鍵在於確保在典型的交互式程序中執行cout << "Enter something: "; cin >> something; cout << "Enter something: "; cin >> something; ,在程序等待輸入之前,提示實際出現在屏幕上。

但在你的情況下,那些額外的flush()調用會破壞流可能做的任何緩沖,從而損害性能。

你可以用cin.tie(nullptr);打破平局cin.tie(nullptr);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM