1. 程式人生 > >C++中如何求陣列長度

C++中如何求陣列長度

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來做除法。