I know in C++ you can get a arrays amount of rows and columns with:
int rows = sizeof array / sizeof array[0]; int cols = sizeof array[0] / sizeof array[0][0]; However is there any better way to do this?
12 Answers
In C++11 you can do this using template argument deduction. It seems that the extent type_trait already exists for this purpose:
#include <type_traits> // ... int rows = std::extent<decltype(array), 0>::value; int cols = std::extent<decltype(array), 1>::value; Also you can use sizeof() function;
int rows = sizeof (animals) / sizeof (animals[0]); int cols = sizeof (animals[0]) / sizeof (string); Example:
#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; } } Output:
fox dog cat mouse squirrel parrot