1

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

1 回答 1

1

1) 请参阅文档 Boost MultiArray 关于成员函数 data():

元素*数据();
常量元素*数据()常量;

这将返回一个指向包含数组数据的连续块的开头的指针。如果数组的所有维度都以 0 为索引并按升序存储,则相当于 origin()。请注意, 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

于 2012-11-01T09:47:46.523 回答