Rumah > pembangunan bahagian belakang > C++ > Adakah scanf() Sentiasa Mencapai Prestasi iostream dalam Kelajuan Input C?

Adakah scanf() Sentiasa Mencapai Prestasi iostream dalam Kelajuan Input C?

Patricia Arquette
Lepaskan: 2024-11-19 11:13:02
asal
416 orang telah melayarinya

Does scanf() Always Outperform iostream in C   Input Speed?

Bolehkah scanf() mengatasi iostream dalam Prestasi C?

Tanggapan bahawa scanf() menyediakan pengendalian input yang lebih pantas daripada cin dalam C telah tercetus perdebatan di kalangan pengaturcara. Artikel ini menyelidiki perbandingan prestasi antara kaedah ini, memeriksa bukti dan memberikan penjelasan terperinci.

Ujian Prestasi

Untuk menilai perbezaan prestasi, program ringkas telah dicipta yang membaca senarai nombor daripada input standard dan melakukan operasi XOR pada mereka. Kedua-dua cin dan scanf() telah digunakan dalam pelaksanaan berasingan:

  • cin Versi:
#include <iostream>

int main() {
  int parity = 0;
  int x;

  while (std::cin >> x)
    parity ^= x;
  std::cout << parity << std::endl;

  return 0;
}
Salin selepas log masuk
  • scanf Versi:
#include <stdio.h>

int main() {
  int parity = 0;
  int x;

  while (1 == scanf("%d", &x))
    parity ^= x;
  printf("%d\n", parity);

  return 0;
}
Salin selepas log masuk

Keputusan

Menggunakan fail yang mengandungi lebih 33 juta nombor rawak, masa pelaksanaan diukur:

  • Versi cin: 24.3 saat
  • Versi imbasan: 6.4 saat

Pertimbangan Pengoptimuman

Menukar tetapan pengoptimuman pengkompil mempunyai kesan minimum pada hasil.

Prestasi iostream yang dipertingkatkan

Telah didapati bahawa jurang prestasi adalah sebahagiannya disebabkan oleh iostream mengekalkan penyegerakan dengan fungsi C I/O. Dengan melumpuhkan penyegerakan ini dengan arahan std::ios::sync_with_stdio(false), prestasi iostream meningkat dengan ketara:

#include <iostream>

int main() {
  int parity = 0;
  int x;

  std::ios::sync_with_stdio(false);

  while (std::cin >> x)
    parity ^= x;
  std::cout << parity << std::endl;

  return 0;
}
Salin selepas log masuk

Hasil Baharu

Selepas melumpuhkan penyegerakan iostream :

  • Versi cin dengan Penyegerakan: 21.9 saat
  • Versi imbasan: 6.8 saat
  • Versi cin tanpa Penyegerakan: 5.5 saat

Kesimpulan

Buktinya menunjukkan bahawa scanf() memang lebih pantas daripada cin untuk pengendalian input mentah dalam C . Walau bagaimanapun, jika penyegerakan iostream dilumpuhkan, iostream menjadi pilihan unggul, mengatasi kedua-dua scanf() dan versi cin yang dioptimumkan.

Oleh itu, walaupun scanf() mungkin lebih pantas untuk senario tertentu, iostream menawarkan kawalan yang lebih baik ke atas penyegerakan dan rangkaian fungsi yang lebih luas. Apabila kelajuan adalah penting, melumpuhkan penyegerakan iostream disyorkan.

Atas ialah kandungan terperinci Adakah scanf() Sentiasa Mencapai Prestasi iostream dalam Kelajuan Input C?. 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