本單元常犯錯誤總覽
| # | 錯誤描述 | 錯誤類型 | ✗ 錯誤寫法 | ✓ 正確寫法 |
|---|---|---|---|---|
| 1 | 全域變數與標準函式庫撞名 | 編譯錯誤(ambiguous) | bits 之下全域 int count; |
換個名字(cnt) |
| 2 | auto 宣告沒有初始值 |
編譯錯誤 | auto x; cin >> x; |
明寫型態 int x; |
| 3 | auto 接 e 記法,推成 double |
精度差 1 的隱形錯 | auto x = 1e18; |
long long x = ...LL; |
| 4 | auto 接 size() - 1 倒著走 |
RE(無號環繞) | for (auto i = v.size() - 1; i >= 0; i--) |
for (int i = (int)v.size() - 1; ...) |
| 5 | 整個 vector 傳值進函式 | TLE(整份複製) | void f(vector<int> v) |
void f(const vector<int> &v) |
| 6 | range-based for 忘記 &,改到複本 |
邏輯錯誤(悄悄不動) | for (int x : v) cin >> x; |
for (int &x : v) cin >> x; |
| 7 | ?: 當左值但兩分支型態不同 |
編譯錯誤 | a 是 int、b 是 long long:(f ? a : b) += 1; |
型態一致,或改用 if else |
| 8 | 二維陣列寫成 g[i, j] |
邏輯錯誤(逗號運算子) | g[1, 2](其實是 g[2]) |
g[1][2] |
| 9 | 巨集參數沒包括號 | Wrong Answer | #define SQ(x) x * x |
#define SQ(x) ((x) * (x)) |
| 10 | 關同步後混用兩套輸入輸出 | 順序不保證 | 開場白+printf |
從頭到尾只選一套 |
| 13 | 大量輸出用 endl |
TLE | 百萬行 << endl |
<< '\n' |