Rumah > pembangunan bahagian belakang > C++ > Mengapakah Input stdin C Jauh Lebih Lambat Daripada Python, dan Bagaimana Ia Boleh Diperbaiki?

Mengapakah Input stdin C Jauh Lebih Lambat Daripada Python, dan Bagaimana Ia Boleh Diperbaiki?

Susan Sarandon
Lepaskan: 2024-12-18 11:57:16
asal
876 orang telah melayarinya

Why is C  's stdin Input Significantly Slower Than Python's, and How Can It Be Improved?

Mengapakah membaca baris daripada stdin jauh lebih perlahan dalam C berbanding Python?

Membaca baris daripada input standard (stdin) boleh menjadi lebih perlahan dalam C berbanding Python disebabkan tetapan lalai yang berbeza dalam aliran input C.

Lalai Penimbalan

Secara lalai, strim input C (cin) disegerakkan dengan strim input/output (stdio) standard. Penyegerakan ini memaksa cin untuk mengelakkan sebarang penimbalan input, menghasilkan bacaan satu aksara pada satu masa.

Penimbalan Python

Sebaliknya, aliran stdin dalam Python ditimbal secara lalai, yang membolehkannya membaca sebahagian besar input sekaligus. Ini mengurangkan bilangan panggilan sistem yang diperlukan untuk membaca data, membawa kepada prestasi yang lebih baik.

Membetulkan Kod C

Untuk mencapai prestasi yang serupa dalam C , anda boleh melumpuhkan penyegerakan dengan stdio dengan menambah baris berikut pada permulaan fungsi utama anda:

std::ios_base::sync_with_stdio(false);
Salin selepas log masuk

Ini membolehkan cin menimbal inputnya dan meningkatkan kelajuan bacaan dengan ketara.

fgets vs. getline

Selain itu, anda boleh mempertimbangkan untuk menggunakan fgets dan bukannya getline(), iaitu fungsi C yang membaca baris teks daripada fail atau input standard. fgets mempunyai kelebihan kerana tidak memerlukan peruntukan memori dinamik, meningkatkan lagi prestasi.

Perbandingan Prestasi

Di bawah ialah jadual membandingkan garisan sesaat (LPS) untuk pendekatan yang berbeza menggunakan fail baris 100M:

Implementation Lines per Second
Python (default) 3,571,428
cin (default/naive) 819,672
cin (no sync) 12,500,000
fgets 14,285,714
wc (not fair comparison) 54,644,808

Seperti yang anda lihat, melumpuhkan penyegerakan atau menggunakan fgets meningkatkan prestasi C .

dengan ketara

Atas ialah kandungan terperinci Mengapakah Input stdin C Jauh Lebih Lambat Daripada Python, dan Bagaimana Ia Boleh Diperbaiki?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan