C++中如何求陣列長度
阿新 • • 發佈:2019-02-08
C++中沒有直接提供求陣列長度的方法,提供了sizeof(),begin(),end()等方法,可以供求陣列長度使用。
可以通過兩種方式來求陣列長度,這裡使用模版類。一個是使用sizeof()做除法,另一種辦法是通過end(),begin()做減法。程式碼如下。
#include <iostream> #include <string> using namespace std; template <class T> int getArrSize(T& arr){ return sizeof(arr) / sizeof(arr[0]); } template <class T> int getArrLength(T& arr){ return end(arr) - begin(arr); } int main(){ string arr[] = {"a","b","c","e","f"}; int arr2[] = {1,3,4,5}; //string arr cout<<"sizeof(arr): "<<sizeof(arr)<<endl; cout<<"sizeof(arr[0]): "<<sizeof(arr[0])<<endl; cout<<"end(arr): "<<end(arr)<<endl; cout<<"begin(arr): "<<begin(arr)<<endl; cout<<"size of arr: "<<getArrSize(arr)<<endl; cout<<"length of arr:"<<getArrLength(arr)<<endl; //int arr cout<<"===================="<<endl; cout<<"sizeof(arr): "<<sizeof(arr2)<<endl; cout<<"sizeof(arr[0]): "<<sizeof(arr2[0])<<endl; cout<<"end(arr): "<<end(arr2)<<endl; cout<<"begin(arr): "<<begin(arr2)<<endl; cout<<"size of arr: "<<getArrSize(arr2)<<endl; cout<<"length of arr:"<<getArrLength(arr2)<<endl; return 0; }
執行結果如下:
sizeof(arr): 120 sizeof(arr[0]): 24 end(arr): 0x7fff5a35b5d8 begin(arr): 0x7fff5a35b560 size of arr: 5 length of arr:5 ==================== sizeof(arr): 16 sizeof(arr[0]): 4 end(arr): 0x7fff5a35b560 begin(arr): 0x7fff5a35b550 size of arr: 4 length of arr:4
對於第一種求陣列長度的辦法,可能不是很明白,為什麼需要sizeof()之後,需要除以sizeof(arr[0])。這裡有幾點需要注意:
1、sizeof不是函式,是操作符,它是編譯時求一個型別所佔的位元組數。
2、sizeof(arr):以長度4的int陣列為例,其實求出了int型別陣列所佔總長度4*4=16。然後需要按照任意一個型別長度其實就是4來做除法。