9

C ++では、次のようにして行と列の配列を取得できることを知っています。

 int rows = sizeof array / sizeof array[0];
 int cols = sizeof array[0] / sizeof array[0][0];

しかし、これを行うためのより良い方法はありますか?

4

2 に答える 2

6

C ++ 11では、テンプレート引数の推定を使用してこれを行うことができます。この目的のためにすでに存在しているようです:extent type_trait

#include <type_traits>
// ...
int rows = std::extent<decltype(array), 0>::value;
int cols = std::extent<decltype(array), 1>::value;
于 2013-02-10T08:15:23.640 に答える
0

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
于 2019-11-02T22:32:51.817 に答える