【问题标题】:What is the easiest way to convert a Boost MultiArray (2d) to a normal 2d-array?将 Boost MultiArray (2d) 转换为普通 2d 数组的最简单方法是什么?
【发布时间】:2012-11-01 17:53:30
【问题描述】:

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

【问题讨论】:

  • double** 不是“普通数组”——它是一个双指针。尽管这是可能的,但这并不是用 C++ 表示二维数组的好方法。

标签: c++ arrays boost


【解决方案1】:

1) 请参阅文档 Boost MultiArray 关于成员函数 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

【讨论】:

    猜你喜欢
    • 2014-08-31
    • 2021-06-09
    • 2012-02-05
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多