定義一個function,輸入array(不限型態),回傳array的項目數
解決方法
如果用sizeof()會回傳byte數,每種型態也會有固定的byte數,所以拿整個陣列的長度除以每項的長度就是所求
int A[5]; //宣告一個項目數為5的整數陣列
sizeof(A); //回傳20
sizeof(int); //回傳4
sizeof(A)/sizeof(int); //回傳5(即所求)
如果今天不是int呢?
因為同一個陣列內容型態相同,每項占用的byte會一樣,所以最快得出陣列每一項所占用的byte數就是取第0項的尺寸
int A[5]; //int占4 byte
char B[5]; //char占1 byte
double C[5]; //double占8 byte
sizeof(A[0]); //回傳4
sizeof(B[0]); //回傳1
sizeof(C[0]); //回傳8
結論
#define len(x) sizeof(x)/sizeof(x[0])
以前寫專案寫習慣Python跟JS,陣列用len(array)或array.length()就可以了
接觸競程後,碰到了中階一點的C++,多了記憶體的概念。相似函式sizeof(array)輸出的會是array用到了幾個byte,我們需要的是幾個項目而不是幾個byte,所以就得除掉每個項目的byte才對。
