Visual Studio 初次安装无法使用 #include <bits/stdc++.h>?一篇文章教你彻底解决
一、问题描述
很多刚开始学习 C++、刷 LeetCode 或者准备算法竞赛的同学,可能都会遇到这样一个问题。
在很多算法题代码中,我们经常看到:
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> nums = {1, 2, 3};
for (int x : nums)
cout << x << \” \”;
return 0;
}
使用 GCC、MinGW 或者一些在线 OJ 平台时,这段代码通常可以直接编译。
但是,当我们第一次安装 Visual Studio 并创建 C++ 项目后,却可能发现:
#include <bits/stdc++.h>
直接报错:
无法打开包括文件: \”bits/stdc++.h\”: No such file or directory
这是为什么?
其实不是你的 Visual Studio 安装坏了,也不是 C++ 配置出了问题。
真正的原因是:bits/stdc++.h 本身就不是 C++ 标准头文件。
二、bits/stdc++.h 到底是什么?
很多初学者会误以为:
bits/stdc++.h 是 C++ 官方提供的“万能头文件”。
实际上并不是。
bits/stdc++.h 属于 GCC 的 libstdc++ 实现,而不是 ISO C++ 标准规定的头文件。
GCC 官方的 libstdc++ 源码中确实存在这个文件,它的作用主要就是作为一个预编译头文件,把大量常用的 C/C++ 标准库头文件集中包含起来。
例如其中会包含:
#include <algorithm>
#include <bitset>
#include <functional>
#include <iterator>
#include <limits>
#include <memory>
#include <new>
#include <numeric>
#include <typeinfo>
#include <utility>
以及大量其他标准库头文件。
所以:
#include <bits/stdc++.h>
本质上就是:
让 GCC 一次性包含大量常用的标准库头文件。
三、为什么 GCC 能用,Visual Studio 却不能?
这里就涉及 C++ 编译器实现的问题了。
常见的 C++ 编译器有:
-
GCC
-
Clang
-
MSVC
其中:
GCC 使用的是 GNU 的 libstdc++ 标准库实现。
而:
Visual Studio 使用的是 Microsoft 的 MSVC + STL 实现。
所以两者提供的非标准头文件并不完全一样。
GCC 提供:
#include <bits/stdc++.h>
而传统的 MSVC STL 中并没有这个文件。
因此,如果你安装 Visual Studio 后直接写:
#include <bits/stdc++.h>
找不到文件是正常现象。
这不是 Visual Studio 不能写 C++,而是:
你正在使用 GCC 特有的头文件,而当前项目使用的是 MSVC。
四、最推荐的方法:直接使用标准头文件
如果你是在开发正规的 C++ 项目,我其实并不推荐强行给 Visual Studio 加上:
bits/stdc++.h
例如:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <unordered_map>
这样才是标准 C++ 的写法。
例如:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> nums = {3, 1, 2};
sort(nums.begin(), nums.end());
for (int x : nums)
cout << x << \” \”;
return 0;
}
这种写法不依赖 GCC 的特殊文件。
以后换到:
-
Visual Studio
-
GCC
-
Clang
-
Linux
-
macOS
都更加方便。
五、但是我就是想在 Visual Studio 里使用万能头文件怎么办?
如果你主要是:
-
刷 LeetCode
-
刷牛客
<
网硕互联帮助中心




评论前必须登录!
注册