bits/stdc++.h,包含了c++所有的头文件,因此被称作万能头文件。
假如DevC++的安装路径为"C:\ProgramFiles (x86)\Dev-Cpp",则bits/stdc++.h的完整路径为"C:\Program Files(x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\x86_64-w64-mingw32\bits"。
stdc++.h中的具体内容为:
// C
#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#if __cplusplus >= 201103L
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif
// C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif
在CSP-J/S考试是可以使用万能头文件的。使用了万能头文件之后,就不再需要包含其他头文件了。
使用万能头文件,会把大量的不需要用到的头文件也包含进去,这样会增加编译时间。但是考虑到CSP-J/S以考察算法为主,代码通常很短,所以即使包含了万能头文件,编译起来也很快。另外,评测程序的时间限制指的是运行时间限制,而不是编译时间限制,所以包含万能头文件不会影响到评分。
也就是说,考试时既可以逐个包含需要用到的头文件,也可以一次性包含万能头文件。
但是,就平时练习来说,建议不要使用万能头文件。理由有三:
第一,万能头文件,也叫“懒人专用头文件”。使用万能头文件,可能会导致你不了解哪个函数具体是在哪个头文件里声明的,从而影响到你对C++基础框架的理解。咱们学C/C++,不仅仅是为了考CSP-J/S认证,更是为了扎扎实实学习信息学知识。
第二,万能头文件只存在于GCC编译器中,clang和MSVC编译器中并没有万能头文件。
第三,除了CSP-J/S外,有时候还有一些其他的考试。有些考试会明确规定不允许使用万能头文件。