C++で配列の長さを求める方法

1198 ワード

C++には配列長を求める方法は直接提供されず,sizeof(),begin(),end()などの方法が提供され,配列長を需給して使用できる.
配列長は2つの方法で求めることができ、ここではテンプレートクラスを使用します.一つはsizeof()を用いて除算を行い,もう一つの方法はend(),begin()を用いて減算を行う.コードは以下の通りです.
#include 
#include 
using namespace std;
template 
int getArrSize(T& arr){
	return sizeof(arr) / sizeof(arr[0]);
}

template 
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<	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

1つ目の配列長を求める方法については、なぜsizeof()が必要なのか、sizeof(arr[0])で除算する必要があるのかよく分からないかもしれない.ここで注意すべき点はいくつかあります.
1、sizeofは関数ではなく、オペレータであり、コンパイル時に1つのタイプを求めるバイト数である.
2、sizeof(arr):長さ4のint配列を例に、intタイプ配列が占める全長4*4=16を求めた.そして、いずれかのタイプの長さで実は4で除算する必要があります.