簡介 C++ 的 Type Erase (用多型和模板做 Duck Type)
起點 讓我們先從 template 出發:foo 需要一個 callback function。 template<typename Func> void foo(Func callback) { // ... callback(); } 但是這會讓編譯錯誤訊息有點模糊:假如 callback 並不是一個可以呼叫的函數指標,或者並不是一個 callable object ,那編譯
起點 讓我們先從 template 出發:foo 需要一個 callback function。 template<typename Func> void foo(Func callback) { // ... callback(); } 但是這會讓編譯錯誤訊息有點模糊:假如 callback 並不是一個可以呼叫的函數指標,或者並不是一個 callable object ,那編譯
四個概念 抽象(Abstraction) Abstraction is selective ignorance. – Andrew Koenig 從沒有任何 code 到生出一個 Car 的 class,我們想把車子抽象出以下東西: move(double t): 移動 t 秒 所以可以寫出這樣的 class struct Car final { Car() = default;
前言 問題起源於這個迴圈,有時,我們會需要倒著存取陣列的元素。 std::vector<int> xs(10); for (size_t i = 9; i >= 0; --i) { // ... xs[i] } 這一部份有個問題,就是這會是無窮迴圈。 一個保留 size_t 型別的方式,是這樣寫: for (size_t i = 9 + 1; i--;) { // ... xs[i] }
2022 FB Hackercup Round2 比賽時只寫出 A1、 D1,A2是賽後補的。進不了 Round3 ,不過名次應該可以拿到 T-shirt。 感想:怎麼兩題都線段樹 🤣 Problem A: Perfectly Balanced Prob A2 題目 給定一個數列,要支援以下兩種操作: 單點修改:修改單個數字 區間查詢:確認該區間是否可以分成兩半,其中一半剛好和另一半只差一個數
https://www.facebook.com/codingcompetitions/hacker-cup/2022/round-1 Round1 竟然足足有 1 天時間,本來想下午再寫,但早上 6 點睡不著只好爬起來寫了 A 和 B。 Problem A: Consecutive Cuts ProbA 題意整理 給兩個字串 \(A\)、\(B\),要對 \(A\) 做 \(K\) 次旋轉,每一
https://www.facebook.com/codingcompetitions/hacker-cup/2022/qualification-round 由於只要寫一題便可以通關,所以我只在時間內寫了 A 和 B1,賽後補了 C1 + C2,沒寫 D。 Problem A: Second Hands 題目連結 題意整理 兩個展示櫃 一個展示櫃最多只能擺 \( K \) 個時鐘 每個展示櫃不