Ada situs Stack Exchange yang disebut Programming Puzzles & Code Golf . The teka-teki pemrograman di situs yang sesuai definisi teka-teki :
mainan, masalah, atau alat lain yang dirancang untuk menghibur dengan menghadirkan kesulitan yang harus diselesaikan dengan kecerdikan atau upaya pasien.
Mereka dirancang untuk menghibur, dan tidak sedemikian rupa sehingga programmer yang bekerja mungkin terhibur dengan masalah dunia nyata yang dihadapi dalam pekerjaan sehari-hari mereka.
Code Golf adalah "jenis kompetisi pemrograman komputer rekreasi di mana peserta berusaha untuk mencapai kode sumber sesingkat mungkin yang mengimplementasikan algoritma tertentu." Di jawaban di situs PP&CG, Anda akan melihat orang-orang menentukan jumlah byte dalam jawaban mereka. Ketika mereka menemukan cara untuk memangkas beberapa byte, mereka akan mencoret nomor aslinya dan mencatat yang baru.
Seperti yang Anda duga, kode golf memberikan penghargaan pada penyalahgunaan bahasa pemrograman ekstrem. Nama variabel satu huruf. Tanpa spasi putih. Penggunaan fungsi perpustakaan secara kreatif. Fitur tidak berdokumen. Praktek pemrograman yang tidak standar. Retas yang mengerikan.
Jika seorang programmer mengajukan permintaan tarik di tempat kerja yang berisi kode gaya golf, itu akan ditolak. Rekan kerja mereka akan menertawakan mereka. Manajer mereka akan mampir di meja mereka untuk mengobrol. Meski begitu, pemrogram menghibur diri dengan mengirimkan jawaban ke PP&CG.
Apa hubungannya ini stdc++.h
? Seperti yang orang lain tunjukkan, menggunakannya itu malas. Ini non-portabel, jadi Anda tidak tahu apakah itu akan bekerja pada kompiler Anda atau versi kompiler Anda berikutnya. Ini menumbuhkan kebiasaan buruk. Ini bukan standar, jadi perilaku program Anda mungkin berbeda dari yang Anda harapkan. Ini dapat meningkatkan waktu kompilasi dan ukuran yang dapat dieksekusi.
Ini semua adalah keberatan yang sah dan benar. Jadi mengapa ada orang yang menggunakan kebodohan ini?
Ternyata beberapa orang menyukai pemrograman puzzle tanpa kode golf . Mereka berkumpul dan bersaing di acara-acara seperti ACM-ICPC, Google Code Jam, dan Facebook Hacker Cup, atau di situs-situs seperti Topcoder dan Codeforces. Peringkat mereka didasarkan pada kebenaran program, kecepatan eksekusi, dan seberapa cepat mereka mengirimkan solusi. Untuk memaksimalkan kecepatan eksekusi, banyak peserta menggunakan C ++. Untuk memaksimalkan kecepatan pengkodean, beberapa di antaranya digunakan stdc++.h
.
Apakah ini ide yang bagus? Mari kita periksa daftar kerugiannya. Portabilitas? Tidak masalah karena acara pengkodean ini menggunakan versi kompiler khusus yang diketahui oleh para kontestan sebelumnya. Kepatuhan standar? Tidak relevan untuk satu blok kode yang masa pakainya kurang dari satu jam. Kompilasi waktu dan ukuran yang dapat dieksekusi? Ini bukan bagian dari rubrik penilaian kontes.
Jadi kita dibiarkan dengan kebiasaan buruk. Ini adalah keberatan yang sah. Dengan menggunakan file header ini, kontestan menghindari kesempatan untuk mengetahui file header standar mana yang mendefinisikan fungsionalitas yang mereka gunakan dalam program mereka. Ketika mereka menulis kode dunia nyata (dan tidak menggunakan stdc++.h
) mereka harus menghabiskan waktu mencari informasi ini, yang berarti mereka akan kurang produktif. Itulah kelemahan berlatih dengan stdc++.h
.
Hal ini menimbulkan pertanyaan mengapa layak untuk ikut serta dalam pemrograman kompetitif jika mendorong kebiasaan buruk seperti menggunakan stdc++.h
dan melanggar standar pengkodean lainnya. Salah satu jawabannya adalah bahwa orang melakukannya karena alasan yang sama dengan mereka memposting program pada PP&CG: beberapa programmer merasa senang menggunakan keterampilan pengkodean mereka dalam konteks seperti gim.
Jadi pertanyaan apakah akan digunakan stdc++.h
turun ke apakah manfaat kecepatan pengkodean dalam kontes pemrograman melebihi kebiasaan buruk yang mungkin dikembangkan dengan menggunakannya.
Pertanyaan ini bertanya: "Mengapa saya tidak harus # mencantumkan <bits/stdc++.h>
?" Saya menyadari bahwa itu ditanyakan dan dijawab untuk menegaskan, dan jawaban yang diterima dimaksudkan sebagai Satu Jawaban Sejati untuk pertanyaan ini. Tetapi pertanyaannya bukan "Mengapa saya tidak memasukkan # <bits/stdc++.h>
kode produksi?" Karena itu, saya pikir masuk akal untuk mempertimbangkan skenario lain di mana jawabannya mungkin berbeda.
using namespace std;
luar sana.