Um anzufangen, mache ich std::ios_base::sync_with_stdio(false)
. Ich habe die folgenden Teile des Codes, eine Million Zahlen aus einer Textdatei zu lesen (<input.txt >output.txt
):Alternating cin/cout ist zu langsam?
int tests;
cin >> tests;
for (int i = 0; i < tests; ++i) {
int number;
cin >> number;
cout << number << "\n";
}
und
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";
}
Natürlich in Wirklichkeit sind sie mehr als nur die gleichen Zahlen zu drucken. Das Problem ist, der erste Block dauert etwa 4 mal so lange (6,2 Sekunden gegenüber 1,8).
Das Umschreiben des gleichen Codes mit printf
/scanf
dauert 3 Sekunden in beiden Fällen. Was ist der Grund dafür?
'cin' und' cout' sind [ 'tie()' d.] (Http://en.cppreference.com/w/cpp/io/basic_ios/ tie), die auf einer ruft 'flush()' auf der anderen Seite. –
Soll 'sync_with_stdio' das nicht verhindern? – riv
Nein. Das bricht die Verbindung zwischen 'cout' und' printf', sagen wir. Nicht zwischen "cout" und "cin". –