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) メンバー関数 data() については、Boost MultiArray のドキュメントを参照してください。

要素 * データ ();
const element* data() const;

これは、配列のデータを含む連続ブロックの先頭へのポインターを返します。配列のすべての次元のインデックスが 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 に答える