Я хотел бы инициализировать boost :: multi_array inline в некотором коде. Но я не думаю, что boost :: multi_array поддерживает инициализацию из списка инициализаторов. Вот то, что я до сих пор:Каков наилучший способ заполнения boost :: multi_array из списка инициализаторов?
// First create a primitive array, which can be directly initialized
uint8_t field_primitive[4][8] = {
{ 1,1,1,1,1,1,1,1 },
{ 1,2,1,2,1,2,1,2 },
{ 1,1,2,2,2,2,2,2 },
{ 1,2,2,2,2,2,2,2 }
};
// Create the boost::multi_array I actually want to use
boost::multi_array<uint8_t, 2> field(boost::extents[4][8]);
// Compact but yucky approach to copying the primitive array contents into the multi_array.
memcpy(field.data(), field_primitive, field.num_elements() * sizeof(uint8_t));
Мне нравится, что я могу компактно выразить содержание матрицы, используя фигурные скобки список intializer. Но мне не нравится «memcpy», и мне не нравится использование простого массива примитивов. Есть ли лучший способ заполнить мой boost :: multi_array из читаемого встроенного набора значений в коде?
Возможно, что-то здесь помогает? http://stackoverflow.com/questions/8824247/one-line-initialiser-for-boost-multiarray – Tas
Следующая ссылка из thecppboostlibraries показывает пример с использованием 'origin()' и 'memcpy': https://theboostcpplibraries.com /boost.multiarray –
@ Этот вопрос связан с созданием multi_array с определенными РАЗМЕРЫ. Мой вопрос о создании multi_array с определенным СОДЕРЖАНИЕМ. –