Existe um site do Stack Exchange chamado Programming Puzzles & Code Golf . Os quebra - cabeças de programação nesse site se encaixam nesta definição de quebra - cabeça :
um brinquedo, problema ou outro artifício destinado a divertir, apresentando dificuldades a serem resolvidas por engenhosidade ou esforço do paciente.
Eles são projetados para divertir, e não da maneira que um programador que trabalha pode se divertir com um problema do mundo real encontrado em seu trabalho diário.
O Code Golf é "um tipo de competição recreativa de programação de computadores, na qual os participantes se esforçam para alcançar o menor código-fonte possível que implementa um determinado algoritmo". Nas respostas no site PP&CG, você verá pessoas especificar o número de bytes em suas respostas. Quando encontrarem uma maneira de economizar alguns bytes, eles eliminarão o número original e gravarão o novo.
Como você pode esperar, o código de golfe recompensa o abuso extremo da linguagem de programação. Nomes de variáveis de uma letra. Sem espaço em branco. Uso criativo das funções da biblioteca. Recursos não documentados. Práticas de programação não padronizadas. Hacks terríveis.
Se um programador enviasse uma solicitação pull no trabalho contendo código no estilo golf, ela seria rejeitada. Seus colegas de trabalho riam deles. O gerente deles passava por sua mesa para conversar. Mesmo assim, os programadores se divertem enviando respostas ao PP&CG.
O que isso tem a ver stdc++.h
? Como outros já apontaram, usá-lo é preguiçoso. Como não é portátil, você não sabe se ele funcionará no seu compilador ou na próxima versão do seu compilador. Promove maus hábitos. Como não é padrão, o comportamento do seu programa pode ser diferente do esperado. Isso pode aumentar o tempo de compilação e o tamanho do executável.
Todas essas são objeções válidas e corretas. Então, por que alguém usaria essa monstruosidade?
Acontece que algumas pessoas gostam de programar quebra-cabeças sem o código de golfe . Eles se reúnem e competem em eventos como ACM-ICPC, Google Code Jam e Facebook Hacker Cup, ou em sites como Topcoder e Codeforces. Sua classificação é baseada na correção do programa, na velocidade de execução e na rapidez com que eles enviam uma solução. Para maximizar a velocidade de execução, muitos participantes usam C ++. Para maximizar a velocidade de codificação, alguns deles usam stdc++.h
.
Esta é uma boa ideia? Vamos verificar a lista de desvantagens. Portabilidade? Não importa, pois esses eventos de codificação usam uma versão específica do compilador que os competidores conhecem antecipadamente. Conformidade com os padrões? Não é relevante para um bloco de código cuja vida útil é inferior a uma hora. Tempo de compilação e tamanho do executável? Isso não faz parte da rubrica de pontuação do concurso.
Então ficamos com maus hábitos. Esta é uma objeção válida. Ao usar esse arquivo de cabeçalho, os concorrentes estão evitando a chance de aprender qual arquivo de cabeçalho padrão define a funcionalidade que eles estão usando em seu programa. Quando escrevem código do mundo real (e não usam stdc++.h
), eles precisam gastar tempo procurando essas informações, o que significa que serão menos produtivos. Essa é a desvantagem de praticar com stdc++.h
.
Isso levanta a questão de por que vale a pena participar de programação competitiva, se encoraja maus hábitos, como usar stdc++.h
e violar outros padrões de codificação. Uma resposta é que as pessoas fazem isso pela mesma razão que publicam programas no PP&CG: alguns programadores acham agradável usar suas habilidades de codificação em um contexto de jogo.
Portanto, a questão de se usar stdc++.h
se resume a se a velocidade de codificação se beneficia em um concurso de programação supera os maus hábitos que se pode desenvolver ao usá-lo.
Esta pergunta é: "Por que não devo # incluir <bits/stdc++.h>
?" Sei que foi perguntado e respondido para fazer um argumento, e a resposta aceita pretende ser a única resposta verdadeira a essa pergunta. Mas a pergunta não é "Por que não devo # incluir <bits/stdc++.h>
no código de produção?" Portanto, acho razoável considerar outros cenários em que a resposta pode ser diferente.
using namespace std;
em algum lugar.