如何分配/复制 Boost::multi_array

Posted

技术标签:

【中文标题】如何分配/复制 Boost::multi_array【英文标题】:How to assign / copy a Boost::multi_array 【发布时间】:2009-08-06 08:55:38 【问题描述】:

我想分配一个 boost::multi_array 的副本。我怎样才能做到这一点。我要为其分配的对象已使用默认构造函数进行了初始化。

此代码不起作用,因为尺寸和大小不一样

class Field 
  boost::multi_array<char, 2> m_f;

  void set_f(boost::multi_array<short, 2> &f) 
    m_f = f;
  

用什么来代替m_f = f

【问题讨论】:

【参考方案1】:

您应该在分配之前调整m_f 的大小。它可能类似于以下示例:

void set_f(boost::multi_array<short, 2> &f) 
    std::vector<size_t> ex;
    const size_t* shape = f.shape();
    ex.assign( shape, shape+f.num_dimensions() );
    m_f.resize( ex );
    m_f = f;

可能有更好的方法。将short 转换为char 将是隐式的。如果你想要显式转换,你应该考虑使用std::transform

【讨论】:

真的吗? boost 没有提供任何方法来做到这一点?最多两个?

以上是关于如何分配/复制 Boost::multi_array的主要内容,如果未能解决你的问题,请参考以下文章

如何在函数内正确分配结构? [复制]

如何找出动态分配数组的大小(使用 sizeof())? [复制]

Dexie如何将结果分配给变量? [复制]

如何在 C 中动态分配二维数组? [复制]

如何将承诺的返回值分配给变量? [复制]

如何允许移动构造并禁止分配和复制类的构造