C ++では、次のようにして行と列の配列を取得できることを知っています。
int rows = sizeof array / sizeof array[0];
int cols = sizeof array[0] / sizeof array[0][0];
しかし、これを行うためのより良い方法はありますか?
C ++では、次のようにして行と列の配列を取得できることを知っています。
int rows = sizeof array / sizeof array[0];
int cols = sizeof array[0] / sizeof array[0][0];
しかし、これを行うためのより良い方法はありますか?
C ++ 11では、テンプレート引数の推定を使用してこれを行うことができます。この目的のためにすでに存在しているようです:extent
type_trait
#include <type_traits>
// ...
int rows = std::extent<decltype(array), 0>::value;
int cols = std::extent<decltype(array), 1>::value;
sizeof()関数も使用できます。
int rows = sizeof (animals) / sizeof (animals[0]);
int cols = sizeof (animals[0]) / sizeof (string);
例:
#include <iostream>
using namespace std;
void sizeof_multidim_arrays(){
string animals[][3] = {
{"fox", "dog", "cat"},
{"mouse", "squirrel", "parrot"}
};
int rows = sizeof (animals) / sizeof (animals[0]);
int cols = sizeof (animals[0]) / sizeof (string);
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
cout << animals[i][j] << " " << flush;
}
cout << endl;
}
}
出力:
fox dog cat
mouse squirrel parrot