Boost.MultiArray работает с непрерывной памятью (логически упорядоченной во многих измерениях), поэтому трудно добавлять элементы во внутренние измерения. MultiArrays может быть динамически изменен, например, добавлять элементы в любом измерении, но это дорогостоящая операция, которая почти наверняка требует (внутреннего) перераспределения и копирования.
Из-за этого требования MultiArray - не лучший вариант. Но из того, что вы говорите, похоже, вам подойдет комбинация из двух.
boost::multi_array<std::vector<std::vector<type>>, 2> data
Очень приятно то, что интерфейс индексации не меняется относительно boost::multi_array<type, 4>
. Например, data[1][2][3][4]
все еще имеет смысл.
Я не знаю из вашего поста, как вы справляетесь с внутренним измерением, но может даже иметь смысл использовать это:
boost::multi_array<boost::multi_array<type>, 2>, 2> data
В любом случае, если вам действительно не нужна линейная алгебра, я бы держался в стороне от boost::ublas::array
или, самое большее, использовал ее для внутреннего массива, если type
числовой. boost::multi_array<boost::ublas::array<type>, 2> data
, который упоминается в другом ответе.