我个人使用的配置是基于知乎上这篇文章上面进行了一些修改.
1.文件夹组织:
.vscode 配置文件.内容如下:

{ "version": "0.2.0", "configurations": [ {//这个大括号里是我们的‘调试(Debug)’配置 "name": "Debug", // 配置名称 "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加) "program": "${fileDirname}\bin\${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径 "args": [], // 程序调试时传递给程序的命令行参数,这里设为空即可 "stopAtEntry": true, // 设为true时程序将暂停在程序入口处,相当于在main上打断点 "cwd": "${fileDirname}", // 调试程序时的工作目录,此处为源码文件所在目录 "environment": [], // 环境变量,这里设为空即可 "externalConsole": false, // 为true时使用单独的cmd窗口,跳出小黑框;设为false则是用vscode的内置终端,建议用内置终端 "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,新手调试用不到 "MIMode": "gdb", // 指定连接的调试器,gdb是minGW中的调试程序 "miDebuggerPath": "D:\SoftWare\mingw64\bin\gdb.exe", // 指定调试器所在路径,如果你的minGW装在别的地方,则要改成你自己的路径,注意间隔是\ "preLaunchTask": "build" // 调试开始前执行的任务,我们在调试前要编译构建。与tasks.json的label相对应,名字要一样 }] }

{ "files.associations": { "iostream": "cpp", "algorithm": "cpp", "deque": "cpp", "memory": "cpp", "tuple": "cpp", "vector": "cpp", "xlocnum": "cpp", "xmemory": "cpp", "xstring": "cpp", "xutility": "cpp", "type_traits": "cpp", "iterator": "cpp", "utility": "cpp", "xiosbase": "cpp", "xlocale": "cpp", "xlocinfo": "cpp", "xtree": "cpp", "queue": "cpp", "cctype": "cpp", "cerrno": "cpp", "cfloat": "cpp", "climits": "cpp", "cmath": "cpp", "concepts": "cpp", "cstddef": "cpp", "cstdint": "cpp", "cstdio": "cpp", "cstdlib": "cpp", "cstring": "cpp", "cwchar": "cpp", "exception": "cpp", "initializer_list": "cpp", "ios": "cpp", "iosfwd": "cpp", "istream": "cpp", "limits": "cpp", "map": "cpp", "new": "cpp", "ostream": "cpp", "stack": "cpp", "stdexcept": "cpp", "streambuf": "cpp", "string": "cpp", "system_error": "cpp", "typeinfo": "cpp", "xfacet": "cpp", "xstddef": "cpp", "xtr1common": "cpp", "bitset": "cpp", "ctime": "cpp", "list": "cpp", "set": "cpp" }, "C_Cpp.errorSquiggles": "Enabled" }

{ "version": "2.0.0", "tasks": [ {//这个大括号里是‘构建(build)’任务 "label": "build", //任务名称,可以更改,不过不建议改 "type": "shell", //任务类型,process是vsc把预定义变量和转义解析后直接全部传给command;shell相当于先打开shell再输入命令,所以args还会经过shell再解析一遍 "command": "g++", //编译命令,这里是gcc,编译c++的话换成g++ "args": [ //方括号里是传给gcc命令的一系列参数,用于实现一些功能 "${file}", //指定要编译的是当前文件 "-o", //指定输出文件的路径和名称 "${fileDirname}\bin\${fileBasenameNoExtension}.exe", //承接上一步的-o,让可执行文件输出到源码文件所在的文件夹下的bin文件夹内,并且让它的名字和源码文件相同 "-g", //生成和调试有关的信息 //"-Wall", // 开启额外警告 //"-static-libgcc", // 静态链接libgcc "-fexec-charset=GBK", // 生成的程序使用GBK编码,不加这一条会导致Win下输出中文乱码 "-std=c++11", // 语言标准,可根据自己的需要进行修改,写c++要换成c++的语言标准,比如c++11 ], "group": { //group表示‘组’,我们可以有很多的task,然后把他们放在一个‘组’里 "kind": "build",//表示这一组任务类型是构建 "isDefault": true//表示这个任务是当前这组任务中的默认任务 }, "presentation": { //执行这个任务时的一些其他设定 "echo": false,//表示在执行任务时在终端要有输出 "reveal": "always", //执行任务时是否跳转到终端面板,可以为always,silent,never "focus": false, //设为true后可以使执行task时焦点聚集在终端,但对编译来说,设为true没有意义,因为运行的时候才涉及到输入 "panel": "shared" //每次执行这个task时都新建一个终端面板,也可以设置为shared,共用一个面板,不过那样会出现‘任务将被终端重用’的提示,比较烦人 }, "problemMatcher": "$gcc" //捕捉编译时编译器在终端里显示的报错信息,将其显示在vscode的‘问题’面板里 }, {//这个大括号里是‘运行(run)’任务,一些设置与上面的构建任务性质相同 "label": "run", "type": "shell", "dependsOn": "build", //任务依赖,因为要运行必须先构建,所以执行这个任务前必须先执行build任务, "command": "${fileDirname}\bin\${fileBasenameNoExtension}.exe", //执行exe文件,只需要指定这个exe文件在哪里就好 "group": { "kind": "test", //这一组是‘测试’组,将run任务放在test组里方便我们用快捷键执行 "isDefault": true }, "presentation": { "echo": true, "reveal": "always", "focus": true, //这个就设置为true了,运行任务后将焦点聚集到终端,方便进行输入 "panel": "shared" } } ] }
CF_Contest 打Codeforces专用,每次打完把内容手动清空.
DuiPai 对拍用,bf为朴素算法,sol为将测试算法,random为随机数据生成器,执行duipai以对拍.
其中,bf,以data.in为输入,以data.ans为输出.
sol以data.in为输入,以data.out为输出.
random以data.in为输出.注意上述输入输出是位于SINGLE文件夹下的.

#include <cstdio> #include <cstdlib> #include <ctime> int main() { for (int T = 1; T <= 100; T++) { system("DuiPai\bin\random.exe"); double stSol = clock(); system("DuiPai\bin\sol.exe"); double edSol = clock(); double stBf = edSol; system("DuiPai\bin\bf.exe"); double edBf = clock(); if (system("fc data.ans data.out")) { printf("#%d Wrong Answer ", T); break; } else printf("#%d Accepted Sol time = %.0lfms Bf time = %.0fms", T, edSol - stSol, edBf - stBf); } return 0; }
ProblemSet 用于平时做题,随意使用.
(忽略Study)
in,in2,out.txt也为平时做题测试时随意使用.
以上文件夹下的bin为可执行文件的存储位置,不重要.
2.快捷键
列出常用的快捷键,有些是默认设置,有些则不是,不予区分.
Ctrl+k 删除当前行
Ctrl+Shift+k 关闭当前终端
Ctrl+Enter 在当前行下一行插入空行
Ctrl+Shift+Enter 在当前行上一行插入空行
Ctrl+Shift+D 切换到调试界面
Ctrl+Shift+E 切换到文件夹界面
F5 编译运行
F4 调试
F11 单步执行
F10 单步跳过
Shift+F5 终止调试
此外,在终端窗口按下Ctrl+C可以强行终止正在运行的程序.
3.代码片段
代码片段分为全局(对所有文件夹)和局部(只对当前文件夹)作用的,但还有一个规则,在cpp文件里面输入prefix不会出现除cpp以外的代码片段.所以我直接设置三个全局代码片段也很方便.
全局代码片段默认存储在C盘某个复杂的路径下,局部则存储在这个文件夹里.可以通过在资源管理器中打开找到这个位置.
只放上几个常用的:

{ "Print to console": { "scope": "cpp", "prefix": "qCF", "body": [ "#include <algorithm>", "#include <cstdio>", "#include <cstring>", "#include <iostream>", "using namespace std;", "", "$0", "void solve();", "", "int main(){", " int t;", " scanf("%d", &t);", " while(t--) solve(); ", "", " return 0;", "}", "", "void solve(){", "", "}", ], "description": "A cpp file template for Codeforces contests." } }
↑CF上的比赛基本都有多组数据,于是有了这个板子.输入qC(F)按tab即可调用.

{ "Print to console": { "scope": "cpp", "prefix": "qICPC", "body": [ "#include <algorithm>", "#include <cstdio>", "#include <cstring>", "#include <iostream>", "using namespace std;", "", "$0", "", "int main(){", "", "", " return 0;", "}", ], "description": "A cpp file template for ICPC." } }
↑适用于只有一组数据的题目,输入qI(CPC)按tab调用.
还有一个快读模板:

{ "Print to console": { "scope": "cpp", "prefix": "qRead", "body": [ "inline int read() {", " char ch = getchar();", " int x = 0, f = 1;", " while (ch > '9' || ch < '0') {", " if (ch == '-') f = -1;", " ch = getchar();", " }", " while (ch >= '0' && ch <= '9') {", " x = x * 10 + ch - '0';", " ch = getchar();", " }", " return x * f;", "}", ], "description": "A cpp fast read template." } }
用q作为prefix的开头是为了防止与其它关键字冲突.
4.杂项设置
回车不进行自动补全,与tab区分开.
格式化代码风格(Clang_format_fallback Style):{ BasedOnStyle: Google, IndentWidth: 4}