C++STL:包括所有库

C++ STL : Including all libraries?

本文关键字:包括所 C++STL      更新时间:2023-10-16

如何在我的c++代码中包含stl的所有库,而不是单独包含它们。例如

#include <queue>
#include <containers> 

一种简单的方法,包括所有这些。请帮忙?

#include <bits/stdc++.h>

该库包括大多数STL头文件(尤其是容器)

你不能,但你可以制作一个列表,并将它们放在一个带有标题保护ofc的标题中。

// C++ Full Standard Header Include
#include <cstdlib>
#include <csignal>
#include <csetjmp>
#include <cstdarg>
#include <typeinfo>
#include <typeindex>
#include <type_traits>
#include <bitset>
#include <functional>
#include <utility>
#include <ctime>
#include <chrono>
#include <cstddef>
#include <initializer_list>
#include <tuple>
#include <new>
#include <memory>
#include <scoped_allocator>
#include <climits>
#include <cfloat>
#include <cstdint>
#include <cinttypes>
#include <limits>
#include <exception>
#include <stdexcept>
#include <cassert>
#include <system_error>
#include <cerrno>
#include <cctype>
#include <cwctype>
#include <cstring>
#include <cwstring>
#include <cwchar>
#include <cuchar>
#include <string>
#include <array>
#include <vector>
#include <deque>
#include <list>
#include <forward_list>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <stack>
#include <queue>
#include <algorithm>
#include <iterator>
#include <cmath>
#include <complex>
#include <valarray>
#include <random>
#include <numeric>
#include <ratio>
#include <cfenv>
#include <iosfwd>
#include <ios>
#include <istream>
#include <ostream>
#include <iostream>
#include <fstream>
#include <sstream>
#include <strstream>
#include <iomanip>
#include <streambuf>
#include <cstdio>
#include <locale>
#include <clocale>
#include <codecvt>
#include <regex>
#include <atomic>
#include <thread>
#include <mutex>
#include <future>
#include <condition_variable>
#include <ciso646>
#include <ccomplex>
#include <ctgmath>
#include <cstdalign>
#include <cstdbool>

这应该是完整的列表:)(C++11也必须是活动的)您可能想删除那些不推荐使用的(应该不多/无论如何都会收到警告)和那些因为它们是特殊的/旧的/新的而没有的

最好只包括那些需要的头文件,因为当预处理器处理源文件时,它会用实际内容替换所有头文件。所以,总是尽量减少在程序中使用头。。。

在大多数情况下,没有办法也没有必要这样做。如果你有一个以上的c++文件,你可以创建一个头文件,其中包括你需要的一切,并在所有的c++文件中包括这个单独的头-这种方法也有助于使用预编译的头。

libstdc++记录了一个名为stdc++.h的头文件,该文件包括基于语言方言的大部分(而不是全部)标准头(例如,libstdcC++或libc++似乎都没有实现<cuchar>)。该页提供了如何从中创建预编译头的说明。

据我所知,libc++没有stdc++.h

在Visual Studio C++中,规范的预编译头是stdafx.h。如果您愿意,可以将stdc++.h的内容复制/粘贴到上面。您必须修改检查语言方言的#ifdef指令。在MSVC中,__cplusplus似乎被定义为像199711一样无用的东西。CCD_ 9可以用于确定C++11特征的状态。

要在GCC、#include <bits/stdc++.h>上使用它。

没有一种简单、持久的方法可以实现#include的所有功能

即使按照建议做显而易见的事情,也不会真正奏效。STL每三年更新一次——库偶尔会被弃用/删除,新的库总是被添加——而答案中给出的列表已经相当过时了。此外,即使这可以很容易地完成,也很难想象它会改善您的代码。包含不需要的库会增加可执行文件的大小,而且,正如我在其他地方解释的那样,会减慢编译时间。它还会使代码变得混乱,因此更难维护。

编译时间、可执行文件大小和可维护性是缺乏经验的程序员在急于尽快编写代码时经常忽略的编码考虑因素。经验不足的程序员有时也会被C++STL吓倒,不知道从哪里开始。我不想做假设,但我怀疑你的问题是由这两件事的结合引起的。

如果是这样的话,请记住,学习STL——它提供了什么,没有什么,它的局限性是什么,它是如何组织的,等等——是掌握任何语言的重要而不可避免的一步。幸运的是,有很多资源可以帮助你。核心指南和ISOCPP常见问题解答由该语言的开发人员编写(主要考虑到新的C++用户),并详细介绍了该语言的大致内容。也有很多优秀的书:我特别推荐Stroustrup的《编程:使用C++的原理和实践》。如果您有一个更窄的问题(例如,关于哪些STL函数可以对可迭代容器进行排序),请参阅cpprreference。在像leetcode这样的网站上,你可以练习你所学到的关于好的编程问题的知识。