كيفية تعيين / نسخ دفعة :: Multi_Array
-
11-09-2019 - |
سؤال
أريد تعيين نسخة من دفعة :: 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
?
المحلول
يجب أن تغيير حجم 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
إذا كنت تريد تحويل صريح.
لا تنتمي إلى StackOverflow