Programming Puzzles & Code Golf adlı bir Stack Exchange sitesi var . Bu sitedeki programlama bulmacaları bulmacanın şu tanımına uygundur :
yaratıcılık ya da hasta çabasıyla çözülmesi gereken güçlükler sunarak eğlendirmek için tasarlanmış bir oyuncak, problem ya da başka bir çelişki.
Çalışan bir programcının günlük işlerinde karşılaşılan gerçek dünya sorunuyla eğlendirilebileceği şekilde eğlendirmek için tasarlanmıştır.
Code Golf "katılımcıların belirli bir algoritmayı uygulayan mümkün olan en kısa kaynak kodunu elde etmeye çalıştıkları bir tür eğlence bilgisayarı programlama yarışmasıdır." PP&CG sitesindeki cevaplarda, insanların cevaplarında bayt sayısını belirlediğini göreceksiniz. Birkaç bayt tıraş etmenin bir yolunu bulduğunda, orijinal numarayı çıkarır ve yenisini kaydeder.
Tahmin edebileceğiniz gibi, kod golfü aşırı programlama dili kötüye kullanımını ödüllendirir. Tek harfli değişken adları. Boşluk yok. Kütüphane fonksiyonlarının yaratıcı kullanımı. Belgelenmemiş özellikler. Standart dışı programlama uygulamaları. Korkunç hackler.
Bir programcı golf tarzı kod içeren bir çekme isteği gönderirse reddedilir. İş arkadaşları onlara gülerdi. Yöneticileri sohbet için masasına bırakacaktı. Yine de, programcılar PP&CG'ye cevap göndererek kendilerini eğlendiriyorlar.
Bunun ne ile ilgisi var stdc++.h
? Diğerlerinin de belirttiği gibi, onu kullanmak tembeldir. Taşınabilir değildir, bu nedenle derleyicinizde mi yoksa derleyicinizin bir sonraki sürümünde mi çalışacağını bilmezsiniz. Kötü alışkanlıkları teşvik eder. Standart değildir, bu nedenle programınızın davranışı beklediğinizden farklı olabilir. Derleme süresini ve yürütülebilir boyutu artırabilir.
Bunların hepsi geçerli ve doğru itirazlardır. Öyleyse neden kimse bu canavarlığı kullansın ki?
Bazı insanlar golf kodu olmadan bulmaca programlama gibi görünüyor . ACM-ICPC, Google Code Jam ve Facebook Hacker Cup gibi etkinliklerde veya Topcoder ve Codeforces gibi sitelerde bir araya geliyor ve yarışıyorlar. Sıralamaları programın doğruluğuna, yürütme hızına ve ne kadar hızlı bir çözüm sunduklarına dayanır. Yürütme hızını en üst düzeye çıkarmak için birçok katılımcı C ++ kullanır. Kodlama hızını en üst düzeye çıkarmak için bazıları kullanır .stdc++.h
Bu iyi bir fikir mi? Dezavantajların listesini kontrol edelim. Taşınabilirlik? Bu kodlama olayları yarışmacıların önceden bildiği belirli bir derleyici sürümünü kullandığından önemli değildir. Standartlara Uygunluk? Kullanım ömrü bir saatten az olan bir kod bloğu için geçerli değildir. Zaman ve çalıştırılabilir boyut derlensin mi? Bunlar yarışmanın puanlama tablosunun bir parçası değildir.
Yani kötü alışkanlıklarımız kaldı. Bu geçerli bir itiraz. Bu başlık dosyasını kullanarak, yarışmacılar hangi standart başlık dosyasının programlarında kullandıkları işlevselliği tanımladığını öğrenme şansından kaçınırlar. Gerçek dünya kodu yazarken (ve kullanmıyorken stdc++.h
) bu bilgileri aramak için zaman harcamak zorunda kalacaklar, yani daha az üretken olacaklar. Bu pratik yapmanın dezavantajı stdc++.h
.
Bu, stdc++.h
diğer kodlama standartlarını kullanmak ve ihlal etmek gibi kötü alışkanlıkları teşvik ederse, neden rekabetçi programlamaya katılmaya değer olduğu sorusunu gündeme getirir . Bir cevap, insanların bunu PP&CG'de program yayınlamakla aynı nedenden ötürü yapmalarıdır: Bazı programcılar kodlama becerilerini oyun benzeri bir bağlamda kullanmanın keyifli olduğunu düşünürler.
Dolayısıyla, kullanılıp kullanılmayacağı sorusu, stdc++.h
bir programlama yarışmasında kodlama hızının faydalarının, onu kullanarak geliştirebileceği kötü alışkanlıklardan daha ağır basmasıyla ilgilidir.
Bu soru soruyor: "Neden #inc içermemeliyim <bits/stdc++.h>
?" Bir noktaya değinmenin istendiğini ve cevaplandığını ve kabul edilen cevabın bu sorunun Tek Doğru Cevabı olması gerektiğini anlıyorum. Ancak soru " <bits/stdc++.h>
Üretim koduna neden dahil olmamalıyım ?" Bu nedenle, cevabın farklı olabileceği diğer senaryoları düşünmenin makul olduğunu düşünüyorum.
using namespace std;
Orada bir yerde bir dahil versiyonu olacağını bilmeliydim .