如何分配/复制Boost :: multi_array

Pet*_*mit 8 c++ boost boost-multi-array

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

此代码不起作用,因为尺寸和大小不相同

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

  void set_f(boost::multi_array<short, 2> &f) {
    m_f = f;
  }
}
Run Code Online (Sandbox Code Playgroud)

用什么而不是m_f = f

Kir*_*sky 5

您应该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;
}
Run Code Online (Sandbox Code Playgroud)

可能有更好的方法.转换shortchar隐含的.std::transform如果要进行显式转换,则应考虑使用.

  • 真的吗?boost在一行中没有提供任何方法吗?最多两个? (5认同)