C++ vs Python
C++ switch vs Python match
C++
不一定逐行比對。當
case是連續的整數,編譯器可能使用 jump table 執行時直接跳轉如果
case較複雜,編譯器可能退回使用類似if-else的策略但仍會做最佳化
Python
是逐行比對。因為 Python 是直譯式語言,
match-case就像結構化的if-elif
特性 |
C++ switch |
Python match |
|---|---|---|
執行方式 |
編譯後可轉為 jump table(快速跳轉) |
逐行比對模式(interpreted 解譯執行) |
支援的資料型別 |
整數、enum(編譯時期常數) |
幾乎所有型別:數值、字串、類別、結構化資料等 |
語法彈性 |
語法固定,僅支援簡單常數 case |
支援模式比對、結構解構、型別檢查、守衛條件等 |
執行效能 |
效能高,視編譯器最佳化而定 |
效能較低,但可讀性與表達能力極高 |
C++ unordered_map vs Python defaultdict
C++
unordered_map其實是比較像 Python 的defaultdict,第一次用新的 key 呼叫 operator[] 時不會出現 key error 而是會有一個預設值。下面這個是可以跑的d['c']的值會變成 1
#include <unordered_map>
std::unordered_map<char, int> d;
d['c']++;