Na początek robię std::ios_base::sync_with_stdio(false)
. Mam następujące fragmenty kodu, czytanie milion liczby całkowite z pliku tekstowego (<input.txt >output.txt
):Alternatywne cin/cout jest wolne?
int tests;
cin >> tests;
for (int i = 0; i < tests; ++i) {
int number;
cin >> number;
cout << number << "\n";
}
i
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";
}
Oczywiście, w rzeczywistości robią więcej niż tylko drukuje te same numery. Problem polega na tym, że pierwszy blok zajmuje około 4 razy więcej czasu (6,2 sekundy w stosunku do 1,8).
Przepisanie tego samego kodu z printf
/scanf
trwa 3 sekundy w obu przypadkach. Jaki jest tego powód?
'cin' i 'cout' to [' wiązanie() 'd]. (Http://en.cppreference.com/w/cpp/io/basic_ios/ tie) Działając na jednym połączeniu 'flush()' na drugim. –
Czy to nie jest to, co ma zapobiec 'sync_with_stdio'? – riv
Nie, które przerywa połączenie między 'cout' i' printf', powiedzmy. Nie pomiędzy 'cout' i' cin'. –