学生在使用Visual Studio 学习中需要注意的问题

1.在Visual Studio 2022中无法使用万能头文件bits/stdc++.h的问题

        在学习C/C++时,尤其是在学习算法时经常会见到#include<bits/stdc++.h>的引用方式。该方式在使用C/C++编程语言时用来包含标准库中的所有头文件,从而避免了大量的单独引用,简化了引用过程。

        但bits/stdc++并不是C/C++的标准头文件,这是一些编译器提供的预编译头文件,在Visual Studio中并未提供,Visual Studio更注重于项目开发,bits/stdc++.h在使用时可能导致代码的可移植性变差,并且其中部分头文件引用后并未使用,可能会导致编译时间变长

        解决该问题的办法为自创bits/stdc++.h头文件

        1.找到自己安装Visual Studio的include目录如:D:\Visual Studio 2022\VC\Tools\MSVC\14.41.34120\include

        2.在该目录下创建名为bits的文件夹

        3.在bits文件夹中创建文本文档,复制以下内容并保存

// 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

        4.将该文档命名为stdc++.h

        之后在Visual Studio中使用万能头文件就不会报错。

2.在Visual Studio 2022中无法使用变长数组的问题

        在练习一些算法题目时,经常会定义一个变长的数组如:int arr[n + 5] = {0};以满足题目不同规模时的要求,但在Visual Studio的编译器中该定义方式不被允许,在Visual Studio的编译器中,数组括号内的值必须为常量,而平时刷算法题时使用到的gcc编译器允许值为变量的形式。

        解决办法为:

        1.打开自己安装Visual Studio时的Visual Studio installer

        

        2.修改安装项

        3.添加“适用于Windows的C++ Clang工具”组件 ,并选择修改

 

        4.等待安装完成,重启Visual Studio

        5.将平台工具集替换为LLVM(clang-cl)

        保存设置后就可以使用变长数组了。 

        ps:使用该方法后不能再使用类似int arr[n] = {0};的赋初值方式,必须逐个赋初值,可采用for循环为可变数组全部赋值为0

3.在Visual Studio 2022中无法使用scanf函数的问题

        scanf是常见的用于从键盘输入的函数,该问题也是在使用Visual Studio时最常见的问题,在Visual Studio时可以用scanf_s函数代替scanf,但该函数在其他编译器中没有,代码可移植性差。

        解决办法为:

        方案一:

                在.c或.cpp文件的开头(第一行)加上宏定义

#define  _CRT_SECURE_NO_WARNINGS 1
         方案二:

                1.在安装路径下搜素newc++file.cpp文件

        

                2.将该文件复制拷贝到桌面一份并用记事本方式打开

                3.打开后为一个空白文本,在其中复制如下,并保存退出

#define  _CRT_SECURE_NO_WARNINGS 1

                4. 将桌面的文件拷贝至原目录替换原文件

                

        此后创建的源文件会自动在第一行写上#define _CRT_SECURE_NO_WARNINGS 1

        方案三: 

                按照解决无法使用变长数组的办法替换平台工具集为LLVM(clang-cl)

总结:

        Visual Studio在使用中与学习时使用的Dev和众多在线ide以及线上刷题系统有部分不同,若学习算法不太建议使用Visual Studio,它的使用与刷算法题时的许多习惯不合。目前总结以上几点,若在后续使用中发现其他不同或冲突会继续补充。

        ps:作者也是正在学习中的小白,大佬轻喷。如发现其他问题,可留言作者,我会验证后继续补充,也欢迎各位指出错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值