語法書 / AA 競程語法書 下冊 / 第十單元 / 本單元語法速查表

本單元語法速查表

語法 用途 範例/注意
vector<int> v; 宣告空 vector #include <vector>
vector<int> v(n, x); 長度 n、每格都是 x x 省略自動補 0n 可以是變數
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 變長補 xassign 每格設為 x;只有 resizex 可省略(預設 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 = v1v1 == v2v1 < v2 複製/字典序比較 內建陣列辦不到的兩件事;複製是 O(n)
string s; cin >> s; 字串宣告與讀入(單詞) #include <string>;不用開大小
s + ts += 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.firstp.second;先比 first 再比 second
array<int, 3> a = {1, 2, 3}; (延伸)容器版固定大小陣列 能當 vector 的元素;#include <array>