我個人使用的配置是基於知乎上這篇文章上面進行了一些修改.
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\n", T); break; } else printf("#%d Accepted\nSol time = %.0lfms\nBf 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}