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

  1. C++で C スタイルの配列サイズを計算するには sizeof 演算子を使う
  2. 配列データを格納してサイズを計算するには std::array コンテナを使う
  3. 配列データを格納してサイズを計算するには std::vector コンテナを使う
  4. 配列のサイズを計算するには std::size メソッドを用いる

この記事では、C++のさまざまなメソッドを使って配列のサイズを取得する方法を紹介します。

C++で C スタイルの配列サイズを計算するには sizeof 演算子を使う

まず、C スタイルの配列のサイズを求めようとするとどうなるかを見てみましょう。この例では、変数 c_array を定義し、10 個の整数値で初期化します。この配列のサイズを計算するには、sizeof 単項演算子を用います。基本的には、c_array オブジェクトを格納するのに必要なバイト数を単一要素 c_array[0] のサイズで割ったものです。

#include <iostream>

using std::cout;
using std::cin;
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::cout;
using std::cin;
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 <iostream>
#include <array>

using std::cout;
using std::cin;
using std::endl;
using std::array;

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::cout;
using std::cin;
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 <iostream>
#include <array>
#include <vector>

using std::cout;
using std::cin;
using std::endl;
using std::array;
using std::vector;
using std::size;

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;
}

関連記事 - C++ Array

  • C++で関数から配列を返す方法
  • C++ で配列を印刷する方法
  • comments powered by Disqus