This question already has an answer here:
I have read from a codeforces Blog that if we #include <bits/stdc++.h>
in a C++
program then there is no need to include any other header files. how does #include <bits/stdc++.h>
works and is it ok to use it instead of including individual header files?
It is basically a header file that includes every standard library.
In programming contests, using this file is a good idea, when you want to reduce the time wasted in doing chores; especially when your rank is time sensitive.
In programming contests, people do focus more on finding algorithm to solve a problem than on software engineering.
But in software engineering perspective, it is not a good idea to use. If you use it actually includes a lot of files, which your program may not need, thus increases both compile time and program size unnecessarily.
It is basically a header file that also includes every standard library and stl include file. The only purpose I can see for it would be for testing and education.
Se e.g. GCC 4.8.0 /bits/stdc++.h source.
Using it would include a lot of unnecessary stuff and increases compilation time.
Edit: As Neil says, it's an implementation for precompiled headers. If you set it up for precompilation correctly it could in fact speed up compilation time depending on your project. (https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html)
I would however suggest that you take time to learn about each of the sl/stl headers and include them separately instead, and not use "superheaders" except for precompilation purposes.
Unfortunately that approach is not portable C++ (so far).
All standard names are in namespace
std
and moreover you cannot know which names are NOT defined by including and header (in other words it's perfectly legal for an implementation to declare the namestd::string
directly or indirectly when using#include <vector>
).Despite this however you are required by the language to know and tell the compiler which standard header includes which part of the standard library. This is a source of portability bugs because if you forget for example
#include <map>
but usestd::map
it's possible that the program compiles anyway silently and without warnings on a specific version of a specific compiler, and you may get errors only later when porting to another compiler or version.In my opinion there are no valid technical excuses because this is necessary for the general user: the compiler binary could have all standard namespace built in and this could actually increase the performance even more than precompiled headers (e.g. using perfect hashing for lookups, removing standard headers parsing or loading/demarshalling and so on).
The use of standard headers simplifies the life of who builds compilers or standard libraries and that's all. It's not something to help users.
However this is the way the language is defined and you need to know which header defines which names so plan for some extra neurons to be burnt in pointless configurations to remember that (or try to find and IDE that automatically adds the standard headers you use and removes the ones you don't... a reasonable alternative).
That header file is not part of the C++ standard, is therefore non-portable, and should be avoided.
Moreover, even if there were some catch-all header in the standard, you would want to avoid it in lieu of specific headers, since the compiler has to actually read in and parse every included header (including recursively included headers) every single time that translation unit is compiled.
It is basically a header file that includes every standard library. In programming contests, using this file is a good idea, when you want to reduce the time wasted in doing chores; especially when your rank is time sensitive. In programming contests, people do focus more on finding algorithm to solve a problem than on software engineering. From, software engineering perspective, it is a good idea to minimize the include. If you use it actually includes a lot of files, which your program may not need, thus increases both compile time and program size unnecessarily.\
visit this for more detail https://www.geeksforgeeks.org/bitsstdc-h-c/
this is best thing for Online coding where rank matters alot
#include <bits/stdc++.h>
is an implementation file for a precompiled header.From, software engineering perspective, it is a good idea to minimize the include. If you use it actually includes a lot of files, which your program may not need, thus increase both compile time and program size unnecessarily. [edit: as pointed out by @Swordfish in the comments that the output program size remains unaffected. But still, it's good practice to include only the libraries you actually need, unless it's some competitive competition]
But in contests, using this file is a good idea, when you want to reduce the time wasted in doing chores; especially when your rank is time sensitive.
It works in most online judges,programming contest environments, including ACM-ICPC (Sub-Regionals, Regionals, and World Finals) and many online judges.
The disadvantages of it are that it