При вложении std :: array может стать очень трудным для чтения и излишне многословным. Противоположный порядок размеров может быть особенно запутанным.
Например:
std::array < std::array <int, 3 > , 5 > arr1;
по сравнению с
char c_arr [5][3];
Также обратите внимание, что begin (), end () и size () все возвращают бессмысленные значения, когда вы вкладываете std :: array.
По этим причинам я создал свои собственные контейнеры многомерного массива фиксированного размера, array_2d и array_3d. У них есть преимущество в том, что они работают с C ++ 98.
Они аналогичны std :: array, но для многомерных массивов 2 и 3 измерения. Они безопаснее и имеют не худшую производительность, чем встроенные многомерные массивы. Я не включил контейнер для многомерных массивов с размерами, превышающими 3, поскольку они встречаются редко. В C ++ 11 можно создать версию шаблона с переменным числом аргументов, которая поддерживает произвольное количество измерений (что-то вроде примера Майкла Прайса).
Пример двумерного варианта:
//Create an array 3 x 5 (Notice the extra pair of braces)
fsma::array_2d <double, 3, 5> my2darr = {{
{ 32.19, 47.29, 31.99, 19.11, 11.19},
{ 11.29, 22.49, 33.47, 17.29, 5.01 },
{ 41.97, 22.09, 9.76, 22.55, 6.22 }
}};
Полная документация доступна здесь:
http://fsma.googlecode.com/files/fsma.html
Вы можете скачать библиотеку здесь:
http://fsma.googlecode.com/files/fsma.zip