C++において、配列の長さを調べる方法を教えてください。
イントロダクション
この記事では、C++で配列の長さを求めるためのさまざまな方法について学びます。
基本的に、配列の長さというのは、対応する配列に実際に存在する要素の総数を指すと言えます。例えば、以下に示すような配列の場合、となります。
int array1[] = { 0, 1, 2, 3, 4 }
ここでは、配列のサイズまたは配列の長さは、その中の要素の総数と等しいです。この場合、その数は『5』です。
C++で配列の長さを見つける方法
今からは、C++で配列の長さを求めるための異なる方法について見ていきましょう。それらの方法は以下の通りです。
-
- 要素ごとに数えると、
-
- begin() と end()、
-
- sizeof() 関数、
-
- STL の size() 関数、
- ポインター。
今、私たちは例と詳細を使って、各方法を一つ一つ話し合いましょう。
1. 要素を一つ一つ数える
与えられた配列をトラバースしながら、同時に走査した要素の総数を数えることで、配列の長さを得ることができますね。
しかし、配列の長さを事前に知らない場合、直接forループを使用してトラバースすることはできません。この問題は、シンプルなfor-eachループを使用することで解決することができます。以下のコードを注意深く見てください。
#include<iostream>
#include<array>
using namespace std;
int main()
{
int c;
int arr[]={1,2,3,4,5,6,7,8,9,0};
cout<<"The array is: ";
for(auto i: arr)
{
cout<<i<<" ";
c++;
}
cout<<"\nThe length of the given Array is: "<<c;
return 0;
}
出力:
The array is: 1 2 3 4 5 6 7 8 9 0
The length of the given Array is: 10
ここでは、前もって言ったように、イテレータiを使ってfor-eachループを使用して配列arr全体を走査します。同時に、カウンターcも増分されます。最後に、走査が終わったときに、cには与えられた配列の長さが格納されます。
2. begin()とend()を使ってください。
標準ライブラリのbegin()とend()関数を使って、配列の長さも計算できます。これらの関数は、それぞれ対応する配列の先頭と末尾を指すイテレータを返します。与えられたコードをよく見てください。
#include<iostream>
#include<array>
using namespace std;
int main()
{
//Given Array
int arr[] = { 11, 22, 33, 44 };
cout<<"The Length of the Array is : "<<end(arr)-begin(arr); //length
return 0;
}
出力速度:
The Length of the Array is : 4
したがって、ここで私たちが見るように、関数end()とbegin()の戻り値の違いは、与えられた配列arrのサイズまたは長さを示しています。つまり、私たちの場合は4です。
C++において、配列の長さをsizeof()関数を使って求める。
C++のsizeof()演算子は、渡された変数やデータのサイズをバイト単位で返します。同様に、配列を格納するのに必要な総バイト数も返します。そのため、単純に配列のサイズを要素ごとに取得したサイズで割ると、配列に含まれる要素の総数がわかります。
私たちにそれがどのように機能するかを示してください。 (Watashitachi ni sore ga dono yō ni kinō suru ka o shimeshite kudasai.)
#include<iostream>
#include<array>
using namespace std;
int main()
{ //Given array
int arr[] = {10 ,20 ,30};
int al = sizeof(arr)/sizeof(arr[0]); //length calculation
cout << "The length of the array is: " <<al;
return 0;
}
出力:
The length of the array is: 3
私たちが見るように、私たちは望んだ出力を得ることができます。
4. STLのsize()関数を使用する。
「私たちは標準ライブラリに定義されたsize()関数を持っています。この関数は、与えられたコンテナ(我々の場合は配列)内の要素の数を返します。」
#include<iostream>
#include<array>
using namespace std;
int main()
{ //Given array
array<int,5> arr{ 1, 2, 3, 4, 5 };
//Using the size() function from STL
cout<<"\nThe length of the given Array is: "<<arr.size();
return 0;
}
「結果:」
The length of the given Array is: 5
望まれる通り、上記のような出力を得ることができます。
5. C++において、ポインタを使用して配列の長さを求める
与えられた配列の長さは、ポインタを使用しても見つけることができます。どのように見つけるかを見てみましょう。
#include<iostream>
#include<array>
using namespace std;
int main()
{ //Given array
int arr[6] = {5,4,3,2,1,0};
int len = *(&arr + 1) - arr;
//*(&arr + 1) is the address of the next memory location
// just after the last element of the array
cout << "The length of the array is: " << len;
return 0;
}
出力:
The length of the array is: 6
式(arr+1)は、配列の最後の要素のすぐ後ろのメモリ空間のアドレスを与えてくれます。したがって、そのアドレスと配列の開始位置または基本アドレス(arr)との差は、与えられた配列に含まれている要素の合計数を示します。
結論
だから、このチュートリアルでは、C++で配列の長さを見つけるためのさまざまな方法について議論しました。上記の例のそれぞれは簡単に実行できますが、私たちはfor-eachループを使用する方法を推奨します。コードの読みやすさだけでなく、クロスプラットフォームの信頼性があるからです。
追加の質問がありましたら、お気軽に以下のコメント欄をご利用ください。
参考文献
- How do I find the length of an array? – Stack Overflow question,
- for-each loop in C++ – JournalDev post.