Існує сайт обміну стеками під назвою Puzzle Puzzle & Code Golf . В головоломки програмування на цьому сайті відповідають цьому визначенню головоломки :
іграшка, проблема чи інший привід, розроблений для розваги, представляючи труднощі, що вирішуються винахідливістю або зусиллями пацієнта.
Вони створені для розваги, а не для того, щоб працюючий програміст міг розвеселити проблему в реальному світі, що виникає в їхній щоденній роботі.
Code Golf - це "різновид змагань з комп’ютерного програмування для відпочинку, в яких учасники прагнуть досягти якомога коротшого вихідного коду, який реалізує певний алгоритм". У відповідях на сайті PP&CG ви побачите, що люди вказують кількість байтів у своїх відповідях. Коли вони знайдуть спосіб відголити кілька байтів, вони викреслять оригінальне число і записують нове.
Як ви могли очікувати, гольф з кодом винагороджує екстремальне зловживання мовою програмування. Одно буквені назви змінних. Немає пробілів. Творче використання функцій бібліотеки. Незадокументовані функції. Нестандартні практики програмування. Жахливі хаки.
Якщо програміст подав запит на тягу на роботі, що містить код у стилі гольфу, його буде відхилено. Їхні колеги сміялися б над ними. Їхній менеджер завітав за їхній стіл для чату. Незважаючи на це, програмісти розважають себе, надсилаючи відповіді на PP&CG.
Що це стосується stdc++.h
? Як зазначали інші, користуватися ним ліниво. Він не портативний, тому ви не знаєте, чи він працюватиме на вашому компіляторі чи наступній версії компілятора. Це виховує шкідливі звички. Це нестандартно, тому поведінка вашої програми може відрізнятися від очікуваного. Це може збільшити час компіляції та розмір виконуваного файлу.
Це все дійсні та правильні заперечення. То чому б хтось використовував цю чудовисько?
Виявляється, деяким люблять програмування пазлів без коду гольфу . Вони збираються та змагаються на таких заходах, як ACM-ICPC, Google Code Jam та Facebook Hacker Cup, або на таких сайтах, як Topcoder та Codeforces. Їх ранг ґрунтується на коректності програми, швидкості виконання та швидкості подання рішення. Для максимальної швидкості виконання багато учасників використовують C ++. Для досягнення максимальної швидкості кодування деякі з них використовують stdc++.h
.
Це гарна ідея? Давайте перевіримо список недоліків. Переносність? Не має значення, оскільки для цих подій кодування використовується певна версія компілятора, про яку учасники знають заздалегідь. Відповідність стандартам? Не стосується блоку коду, термін корисного використання якого становить менше однієї години. Час компіляції та розмір виконуваного файлу? Вони не є частиною конкурсної статті.
Тож ми залишилися зі шкідливими звичками. Це дійсне заперечення. Використовуючи цей заголовок, учасники уникають шансів дізнатися, який стандартний файл заголовка визначає функціонал, який вони використовують у своїй програмі. Коли вони пишуть код у реальному світі (а не використовують stdc++.h
), їм доведеться витрачати час на пошук цієї інформації, а це означає, що вони будуть менш продуктивними. Це і є недоліком практики stdc++.h
.
Це викликає питання, чому варто взагалі брати участь у конкурентному програмуванні, якщо це заохочує шкідливі звички, як використання stdc++.h
та порушення інших стандартів кодування. Одна з відповідей полягає в тому, що люди роблять це з тієї ж причини, коли вони розміщують програми на PP&CG: деяким програмістам приємно використовувати свої навички кодування в ігровому контексті.
Тож питання про те, чи потрібно використовувати, stdc++.h
зводиться до того, чи переваги швидкості кодування в конкурсі програмування переважають шкідливі звички, які можна розвинути, використовуючи його.
Це запитання задає: "Чому я не # включаю <bits/stdc++.h>
?" Я розумію, що його попросили і відповіли, щоб зробити точку, і прийнята відповідь має на меті бути Єдиним істинним відповіддю на це питання. Але питання не в тому, "чому я не повинен # включати <bits/stdc++.h>
у виробничий код?" Тому я вважаю, що розумно розглянути інші сценарії, де відповідь може бути різною.
using namespace std;
десь версія .