C++で配列の長さを求める方法
1198 ワード
C++には配列長を求める方法は直接提供されず,sizeof(),begin(),end()などの方法が提供され,配列長を需給して使用できる.
配列長は2つの方法で求めることができ、ここではテンプレートクラスを使用します.一つはsizeof()を用いて除算を行い,もう一つの方法はend(),begin()を用いて減算を行う.コードは以下の通りです.
実行結果は次のとおりです.
1つ目の配列長を求める方法については、なぜsizeof()が必要なのか、sizeof(arr[0])で除算する必要があるのかよく分からないかもしれない.ここで注意すべき点はいくつかあります.
1、sizeofは関数ではなく、オペレータであり、コンパイル時に1つのタイプを求めるバイト数である.
2、sizeof(arr):長さ4のint配列を例に、intタイプ配列が占める全長4*4=16を求めた.そして、いずれかのタイプの長さで実は4で除算する必要があります.
配列長は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で除算する必要があります.