将Boost MultiArray(2d)转换为普通2d阵列的最简单方法是什么?

时间:2012-10-30 16:33:21

标签: c++ arrays boost

除了预先分配和迭代所有元素之外,是否有将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;
}

1 个答案:

答案 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