C'è un sito Stack Stack chiamato Programming Puzzles & Code Golf . I puzzle di programmazione su quel sito si adattano a questa definizione di puzzle :
un giocattolo, un problema o altro congegno progettato per divertire presentando difficoltà da risolvere con l'ingegno o lo sforzo del paziente.
Sono progettati per divertire e non nel modo in cui un programmatore di lavoro potrebbe essere divertito da un problema del mondo reale riscontrato nel suo lavoro quotidiano.
Code Golf è "un tipo di competizione di programmazione informatica ricreativa in cui i partecipanti si sforzano di ottenere il codice sorgente più breve possibile che implementa un determinato algoritmo". Nelle risposte sul sito PP&CG, vedrai che le persone specificano il numero di byte nelle loro risposte. Quando trovano il modo di radere qualche byte, cancellano il numero originale e registrano quello nuovo.
Come ci si potrebbe aspettare, il golf di codice premia l'abuso estremo del linguaggio di programmazione. Nomi variabili di una lettera. Nessuno spazio bianco. Uso creativo delle funzioni di libreria. Funzionalità non documentate. Pratiche di programmazione non standard. Hack spaventosi.
Se un programmatore ha inviato una richiesta pull al lavoro contenente un codice di tipo golf, verrebbe respinto. I loro colleghi avrebbero riso di loro. Il loro manager sarebbe passato dalla loro scrivania per una chat. Anche così, i programmatori si divertono inviando risposte a PP&CG.
Cosa c'entra questo stdc++.h
? Come altri hanno sottolineato, usarlo è pigro. È non portatile, quindi non sai se funzionerà sul tuo compilatore o sulla prossima versione del compilatore. Favorisce le cattive abitudini. È non standard, quindi il comportamento del tuo programma potrebbe differire da quello che ti aspetti. Potrebbe aumentare i tempi di compilazione e le dimensioni eseguibili.
Queste sono tutte obiezioni valide e corrette. Allora perché qualcuno dovrebbe usare questa mostruosità?
Si scopre che ad alcune persone piace programmare enigmi senza il codice golf . Si riuniscono e competono in eventi come ACM-ICPC, Google Code Jam e Facebook Hacker Cup, o su siti come Topcoder e Codeforces. Il loro rango si basa sulla correttezza del programma, sulla velocità di esecuzione e sulla velocità con cui inviano una soluzione. Per massimizzare la velocità di esecuzione, molti partecipanti usano C ++. Per massimizzare la velocità di codifica, alcuni usano stdc++.h
.
È una buona idea? Controlliamo l'elenco degli svantaggi. Portabilità? Non importa dal momento che questi eventi di codifica utilizzano una specifica versione del compilatore che i concorrenti conoscono in anticipo. Conformità agli standard? Non pertinente per un blocco di codice la cui vita utile è inferiore a un'ora. Tempo di compilazione e dimensione eseguibile? Questi non fanno parte della rubrica dei punteggi del concorso.
Quindi siamo rimasti con cattive abitudini. Questa è un'obiezione valida. Usando questo file di intestazione, i concorrenti evitano la possibilità di sapere quale file di intestazione standard definisce la funzionalità che stanno usando nel loro programma. Quando scrivono il codice del mondo reale (e non lo usano stdc++.h
) dovranno trascorrere del tempo a cercare queste informazioni, il che significa che saranno meno produttivi. Questo è il rovescio della medaglia con la pratica stdc++.h
.
Ciò solleva la questione del perché valga la pena prendere parte alla programmazione competitiva se incoraggia cattive abitudini come l'uso stdc++.h
e la violazione di altri standard di codifica. Una risposta è che le persone lo fanno per lo stesso motivo per cui pubblicano programmi su PP&CG: alcuni programmatori trovano piacevole usare le loro capacità di programmazione in un contesto simile a un gioco.
Quindi la domanda sull'opportunità di utilizzare stdc++.h
dipende dal fatto che i vantaggi della velocità di codifica in un concorso di programmazione superino le cattive abitudini che si potrebbero sviluppare usandolo.
Questa domanda chiede: "Perché non dovrei #includere <bits/stdc++.h>
?" Mi rendo conto che è stato chiesto e risposto per esprimere un punto, e la risposta accettata è intesa come l'unica vera risposta a questa domanda. Ma la domanda non è "Perché non dovrei includere # <bits/stdc++.h>
nel codice di produzione?" Pertanto, penso che sia ragionevole considerare altri scenari in cui la risposta potrebbe essere diversa.
using namespace std;
là fuori da qualche parte.