Что такое bits/stdc++.h
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> v = {3, 1, 2};
sort(v.begin(), v.end());
cout << v[0] << " " << setprecision(3) << sqrt(2.0) << "\n";
return 0;
}1 1.41bits/stdc++.h — служебный файл стандартной библиотеки компилятора GCC (g++), который подключает всю стандартную библиотеку сразу: iostream, vector, algorithm, string, map, cmath, iomanip и остальное. Поэтому на олимпиадах его любят: одна строка вместо десятка #include, и не нужно вспоминать, где лежит sqrt, а где setprecision.
Где он есть, а где нет
- g++ в Linux и MinGW в Windows (Code::Blocks, MSYS2) — есть.
- Visual Studio — нет. Ошибка
C1083: Cannot open include file: 'bits/stdc++.h': No such file or directory. - macOS — обычно нет. Команда
g++там запускает clang со своей стандартной библиотекой, и он пишетfatal error: 'bits/stdc++.h' file not found. Файл появится, только если отдельно поставить настоящий GCC.
Это не часть стандарта C++, поэтому другие компиляторы не обязаны его иметь.
Чем заменить
Подключите нужные заголовки сами. Чаще всего нужны:
| Заголовок | Что в нём |
|---|---|
<iostream> | cin, cout |
<string> | string, getline, stoi, to_string |
<vector> | vector |
<algorithm> | sort, reverse, max_element, count, unique |
<cmath> | sqrt, pow, abs, fabs |
<iomanip> | setprecision, fixed |
<map>, <set> | map, set |
<numeric> | accumulate |
Стоит ли писать bits/stdc++.h
- На олимпиаде с g++ — можно, это обычная практика. Сборка чуть медленнее, но на время работы решения это не влияет.
- В учебных программах и проектах — лучше перечислять заголовки. Так видно, чем программа пользуется, она собирается любым компилятором и быстрее.
Если проверяющая система олимпиады собирает решения компилятором Visual Studio (обычно это видно в списке компиляторов по названию вроде MSVC или Visual C++), решение с bits/stdc++.h получит ошибку компиляции. Выберите в списке g++ или перечислите заголовки.