Adakah Menggunakan scanf() dalam Program C Lebih Cepat daripada cin?
Tuntutan bahawa menggunakan scanf() adalah lebih pantas daripada cin semasa membaca input dalam C mempunyai beberapa kebenaran kepadanya. Berikut ialah penjelasan:
Penanda Aras Kelajuan
Untuk mengesahkan tuntutan, program ujian ringkas telah dibuat untuk membaca senarai nombor daripada input standard dan mengira OR eksklusifnya ( operasi XOR). Dua versi program telah diuji: satu menggunakan iostream (cin dan cout) dan satu lagi menggunakan stdio (scanf dan printf).
Apabila diuji dengan sejumlah besar input (33,280,276 nombor rawak), versi scanf mengatasi versi iostream dengan ketara, menyelesaikan tugas dalam 6.4 saat berbanding 24.3 saat.
Sebab Perbezaan Kelajuan
Perbezaan kelajuan timbul disebabkan penyegerakan iostream dengan fungsi I/O C. Operasi input dan output menggunakan iostream disegerakkan dengan fungsi C I/O (cth., getchar(), putchar()), yang memperkenalkan overhed tambahan.
Pengoptimuman dengan ios::sync_with_stdio(false)
Untuk menangani isu penyegerakan ini, std::ios::sync_with_stdio(false) boleh digunakan untuk melumpuhkan penyegerakan antara iostream dan stdio. Ini membolehkan iostream beroperasi dengan lebih cekap tanpa overhed penyegerakan.
Selepas melumpuhkan penyegerakan, prestasi versi iostream meningkat dengan ketara, menyelesaikan tugasan dalam 5.5 saat, lebih pantas daripada versi scanf.
Kesimpulan
Berdasarkan penanda aras keputusan, menggunakan scanf() sememangnya lebih pantas daripada menggunakan cin apabila membaca sejumlah besar input dalam program C. Walau bagaimanapun, dengan pengoptimuman std::ios::sync_with_stdio(false), iostream berpotensi mengatasi scanf() dan harus dianggap sebagai pilihan pilihan untuk operasi input dan output.
Atas ialah kandungan terperinci Adakah `scanf()` Benar-benar Lebih Cepat Daripada `cin` dalam C , dan Bagaimana Kita Boleh Mengoptimumkan Prestasi `cin`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!