Mengapakah Bacaan Input Standard C Lebih Lambat Daripada Python dan Bagaimana Ia Boleh Diperbaiki?

DDD
Lepaskan: 2024-11-23 07:23:18
asal
848 orang telah melayarinya

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

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);
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan