C++ で配列サイズを求める方法
-
C++ で C スタイルの配列サイズを計算するには
sizeof
演算子を使用する -
配列データを格納してサイズを計算するには
std::array
コンテナを使用する -
配列データを格納してサイズを計算するには
std::vector
コンテナを使用する -
配列のサイズを計算するには
std::size
メソッドを用いる
この記事では、C++ のさまざまなメソッドを使って配列のサイズを取得する方法を紹介します。
C++ で C スタイルの配列サイズを計算するには sizeof
演算子を使用する
まず、C スタイルの配列のサイズを求めようとするとどうなるかを見てみましょう。この例では、変数 c_array
を定義し、10 個の整数値で初期化します。この配列のサイズを計算するには、sizeof
単項演算子を用います。基本的には、c_array
オブジェクトを格納するのに必要なバイト数を単一要素 c_array[0]
のサイズで割ったものです。
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main() {
int c_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << "array size: " << sizeof c_array / sizeof c_array[0] << endl;
return 0;
}
出力:
array size: 10
見ての通り、正しく出力されているようです。では、同じことをしてくれる別の関数を定義してみましょう。
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int get_array_size(int arr[]) { return sizeof arr / sizeof arr[0]; }
int main() {
int c_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << "array size: " << get_array_size(c_array) << endl;
return 0;
}
出力:
array size: 2
間違った数値が出力されました。この問題を解決するために sizeof
演算子を使用するのは信頼できる方法ではありません。sizeof
演算子が正しく動作するためには、配列を関数のパラメータとして受け取ったり、動的に(ヒープ上に)確保したりしてはいけません。sizeof
の不適切な使用を識別するために、IDE は通常エラーが発生しやすいコードセクションをリントしますが、コンパイル中に表示される警告のためにコンパイラフラグを指定することもできます (例えば、-Wsizeof-pointer-div
や -Wall
を gcc
と一緒に指定するなど)。
多くのエッジケースを気にせずに C スタイルの配列のサイズを計算する普遍的な方法はなく、std::vector
クラスが存在するのはそのためです。
配列データを格納してサイズを計算するには std::array
コンテナを使用する
std::vector
を使用する前に、std::array
に触れておきましょう。これは固定サイズの配列を格納するのに使うことができます。これはリソース効率が良く、size()
というサイズを取得するためのメソッドを内蔵しています。
#include <array>
#include <iostream>
using std::array;
using std::cin;
using std::cout;
using std::endl;
int main() {
array<int, 10> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << "array size: " << arr.size() << endl;
return 0;
}
配列データを格納してサイズを計算するには std::vector
コンテナを使用する
コンテナ std::vector
は動的な配列を格納するために用いることができ、size()
を含む複数のメソッドを提供します。
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
int main() {
vector<int> int_array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << "vector size: " << int_array.size() << endl;
return 0;
}
配列のサイズを計算するには std::size
メソッドを用いる
std::size
メソッドは <iterator>
ライブラリの一部であり、std::array
データや要素数を返す std::vector
と同様に std::array
データを操作することができます。
#include <array>
#include <iostream>
#include <vector>
using std::array;
using std::cin;
using std::cout;
using std::endl;
using std::size;
using std::vector;
int main() {
vector<int> int_array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
array<int, 10> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << "vector size: " << size(int_array) << endl;
cout << "array size: " << size(arr) << endl;
return 0;
}