Ian Dorian Macleod
Back to Project Euler
Explaining the stdc++ header file
The goal of the stdc++ header file is basically to put every library you could ever possibly need in C++ (that's not custom) in one place, so that instead of manually writing out include statements and naming each specific library you need for a given problem, you can just always include stdc++ and be done. In theory, this is great because it requires drastically less thinking about what packages you're using for each specific problem (and can cut down on the number of compiler warnings / errors that are thrown due to missing packages). However, there's always a tradeoff to abstracting things in programming, and in this case we have to pay a cost in terms of our compile time. There are many articles on the internet devoted to discussing how to optimize the stdc++ header, with the most general solution being pre-compiling the header prior to running it. However, the cost is still not negligible (hovers around a 6th of a second for me). If you truly want to learn exactly what is going on with different packages in C++, it might be a better idea to manually write include statements (especially since the number of packages you should need for any given Project Euler question ought to be extremely small). However, if you're tired of missing library errors at compile time, this stdc++ file should do just fine! I've included a visual version of the file below, as well as a link to download the actual file. It's worth noting that even after downloading the file, you'll still need to look at your local operating system's architecture to figure out where to put the file, but this should be relatively straightforward and is (like everything else) well documented online already!
File Contents

// C++ includes used for precompiling -*- C++ -*-

// Copyright (C) 2003-2015 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library.  This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.

// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
// .

/** @file stdc++.h
 *  This is an implementation file for a precompiled header.
 */

// 17.4.1.2 Headers

// 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
            
You can also download the source code for the header file here and use it on your local machine.