Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah `scanf()` Benar-benar Lebih Cepat Daripada `cin` dalam C , dan Bagaimana Kita Boleh Mengoptimumkan Prestasi `cin`?

Adakah `scanf()` Benar-benar Lebih Cepat Daripada `cin` dalam C , dan Bagaimana Kita Boleh Mengoptimumkan Prestasi `cin`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-18 11:29:02379semak imbas

Is `scanf()` Really Faster Than `cin` in C  , and How Can We Optimize `cin`'s Performance?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn