Mengapa Membaca Baris daripada stdin dalam C Lebih Lambat Daripada Python
Walaupun dijangka, kod C untuk membaca baris input daripada input standard boleh berprestasi jauh lebih perlahan daripada rakan sejawat Python. Percanggahan ini berpunca daripada tetapan lalai dalam C .
Konfigurasi Strim Input Lalai
Secara lalai, strim input C (cin) disegerakkan dengan input/output standard (stdio ). Penyegerakan ini bermakna cin cuba untuk mengelakkan sebarang penimbalan input, menyebabkan ia membaca aksara satu demi satu.
Mengapa Penimbalan Penting
Biasanya, aliran input menimbal input dalam lebih besar ketulan, mengurangkan bilangan panggilan sistem yang diperlukan untuk mendapatkan semula data. Walau bagaimanapun, pelaksanaan dan penimbal berasingan untuk stdio dan iostream berasaskan FILE* boleh membawa kepada masalah apabila digunakan bersama.
Untuk mengelakkan kemungkinan konflik, strim disegerakkan dengan stdio secara lalai. Cin membaca aksara satu demi satu, memperkenalkan overhed yang ketara, terutamanya apabila memproses jutaan baris.
Penyelesaian
Untuk meningkatkan prestasi, lumpuhkan penyegerakan strim menggunakan sync_with_stdio(false) kaedah pada permulaan fungsi utama:
std::ios_base::sync_with_stdio(false);
Dengan perubahan ini, C strim boleh menampan secara bebas, menghasilkan pengendalian input yang lebih pantas.
Pendekatan Alternatif: fgets
Cara lain untuk meningkatkan kelajuan input ialah menggunakan fungsi fgets dan bukannya getline:
char buffer[1024]; while (fgets(buffer, sizeof(buffer), stdin)) { // Process the line }
Atas ialah kandungan terperinci Mengapakah Bacaan Input Standard C Lebih Lambat Daripada Python dan Bagaimana Ia Boleh Diperbaiki?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!