除了预先分配和迭代所有元素之外,是否有将2D Boost MultiArray转换为普通2D阵列的最佳/最简单方法?
#include "boost/multi_array.hpp"
#include <cassert>
int main ()
{
// Create 2D multi-array
typedef boost::multi_array<double, 2> array_type;
typedef array_type::index index;
array_type A(boost::extents[3][4]);
// Fill in some values ...
double value = 1.0;
for(index i = 0; i != 3; ++i)
for(index j = 0; j != 4; ++j)
A[i][j] = value;
// Convert to a double[3][4] ...
double **convert = ???
return 0;
}
答案 0 :(得分:1)
1)请参阅文档Boost MultiArray关于成员函数data():
element * data();
const element * data()const;这将返回一个指向连续块开头的指针 包含数组的数据。如果数组的所有维度都是 0索引并以升序存储,这相当于 起源()。请注意,const_multi_array_ref仅提供const 这个功能的版本。
或者
2)您可以使用multi_array_ref:
multi_array_ref是一个多维容器适配器。它在任何连续的元素块上提供MultiArray接口。 multi_array_ref导出与multi_array相同的接口,但构造函数除外。
但无论如何 - 我认为将数据从multi_array复制到C-array是个坏主意。如果原因是遗留代码,请参阅 - http://www.boost.org/doc/libs/1_51_0/libs/multi_array/doc/user.html#sec_storage