C++ で配列サイズを求める方法

胡金庫 2023年10月12日
  1. C++ で C スタイルの配列サイズを計算するには sizeof 演算子を使用する
  2. 配列データを格納してサイズを計算するには std::array コンテナを使用する
  3. 配列データを格納してサイズを計算するには std::vector コンテナを使用する
  4. 配列のサイズを計算するには std::size メソッドを用いる
C++ で配列サイズを求める方法

この記事では、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-Wallgcc と一緒に指定するなど)。

多くのエッジケースを気にせずに 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;
}
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Array