本單元重點回顧

  1. bits/stdc++.h 是 GNU 專屬萬用包:全部標頭檔一行搞定;代價是不可移植、編譯變慢、撞名機率增加(ambiguous 錯誤就換變數名)。比賽環境幾乎都是 GNU,放心用。

  2. auto 讓編譯器從初始值推型態:沒有初始值不能用;推的是「初始值的型態」(1e18 是 double)。建議只用在型態名稱又臭又長處——iterator、結構化綁定、lambda。

  3. 參考=別名int &r = a; 之後 ra 是同一個變數;宣告必綁定、綁定不能換。7.5 的參數 & 就是它。

  4. 大容器進函式要加 &:傳值是整份複製 O(n);不改就 const vector<int> &v,要改就去掉 const。

  5. range-based forfor (int x : v) 掃過全部元素;要寫入就加 &,忘了就是「悄悄不動」的複本 bug。拿不到索引、只能從頭走到尾。

  6. 結構化綁定拆 pairauto [a, b] = p;;配 range-based for 掃 vector<pair> 是招牌組合技,複本/別名規則跟 range-based for 同一套。

  7. 條件運算子 a ? b : c:兩個值選一個,一行搞定;它是運算式,分支只能是值。逗號運算子 A, B 結果是 B——for 第三格以外能免則免。

  8. using ll = long long; 取型態別名:綽號與本名同一個型態;llpii 是全圈公認縮寫,別名別取過頭。

  9. (延伸)lambda 把函式寫在使用處[](int x, int y) { return x > y; } 直接塞 sort;[&] 抓外面變數,比較依據不用開全域。

  10. (延伸)巨集是編譯前的文本取代:不是函式、不動腦;括號包好包滿(SQ(1 + 2) 的教訓)。初學上限是 SZ 這種一行小工具,縮寫需求交給 using

  11. 加速開場白兩行+'\n':斷開同步、斷開綁定,cin/cout 不輸 scanf;endl 每行強迫清緩衝區,大量輸出慢五十倍。關同步後兩套輸入輸出不可混用。