本單元語法速查表
| 語法 | 用途 | 範例/注意 |
|---|---|---|
vector<int> v; |
宣告空 vector | #include <vector> |
vector<int> v(n, x); |
長度 n、每格都是 x |
x 省略自動補 0;n 可以是變數 |
v.push_back(x)/v.pop_back() |
尾端加入/移除 | push_back 均攤 O(1)(偶爾整批搬家);空 vector 不可 pop;別人寫的 emplace_back 當它讀 |
v.front()/v.back() |
第一個/最後一個元素 | 空 vector 呼叫是 UB |
vector<int> a[MAX_N];/vector<vector<int>> g; |
vector 的陣列/巢狀 vector | 每條數列各自伸縮;g[i][j] 讀法同二維陣列 |
v.size()/v.empty() |
元素個數/是否為空 | 回傳無號整數:先存 int 再用 |
v.resize(n, x)/v.assign(n, x) |
改長度/整個重設 | resize 變長補 x、assign 每格設為 x;只有 resize 的 x 可省略(預設 0) |
v.at(i) |
同 v[i],但越界會 RE 並報位置 |
除錯時的好朋友 |
v.begin()/v.end() |
指向頭/尾後一格的 iterator | 含頭不含尾 |
v.insert(v.begin() + i, x)/v.erase(v.begin() + i) |
在索引 i 處插入/移除 |
O(n):大量使用會 TLE |
v2 = v1;v1 == v2、v1 < v2 |
複製/字典序比較 | 內建陣列辦不到的兩件事;複製是 O(n) |
string s; cin >> s; |
字串宣告與讀入(單詞) | #include <string>;不用開大小 |
s + t/s += t |
串接 | 迴圈累加一律 +=;兩個字面常數不能相加 |
s.substr(pos, len) |
取子字串 | len 省略取到結尾 |
s.find(t) |
第一次出現的位置 | 沒找到回傳 string::npos,跟它比 |
stoi(s)/stoll(s)/stod(s) |
字串 → 數 | 超出範圍會 RE:大數用 stoll |
to_string(x) |
數 → 字串 | 非負整數位數=to_string(x).size() |
getline(cin, s) |
讀一整行(含空白) | 前面有 cin >> 時先 cin.ignore() |
stringstream ss(line); ss >> x |
把一行拆成多個值 | #include <sstream>;用法同 cin >> |
getline(ss, part, '-') |
依分隔字元切割 | 分隔符是字元(單引號);不跳空白;對 cin 也可用 |
pair<int, char> p = {1, 'a'}; |
成對資料 | p.first、p.second;先比 first 再比 second |
array<int, 3> a = {1, 2, 3}; |
(延伸)容器版固定大小陣列 | 能當 vector 的元素;#include <array> |