std::transform 将一个结构数组复制到另一个结构数组

std::transform to copy one array of struct to another

本文关键字:数组 结构 复制 另一个 一个 transform std      更新时间:2023-10-16

我有以下结构。

typedef struct
{
uint32_t   aa;        
float32_t  bb;  
float32_t  cc;  
float32_t  dd;    
float32_t  ee;    
}struct_1;
typedef struct
{
uint32_t   hh;        
float32_t  bb;  
float32_t  cc;  
float32_t  ii;    
float32_t  jj;    
}struct_2;

我创建了结构数组,其中struct_1是动态分配的,struct_2是静态的。

struct_1 *array1 = new struct_1[300];
struct_2 array2[300];

如何有效地将内容从 array2 复制到 array1? 我不想在这里讨论,因为如果将来更改任何结构的类型,那么它会导致问题。

在这种情况下,我可以使用 std::transform 或 std::copy 吗?请帮我处理语法。

您可以使用std::transform并提供转换函数:

std::transform(std::begin(array2), std::end(array2), array1, [](const struct_2& val) {
return struct_1{val.hh, val.bb, val.cc, val.ii, val.jj};
});

使用循环可能更容易:

struct_1* a1_p = array1;
for (const struct_2& s2 : array2) {
*a1_p++ = struct_1{ s2.hh, s2.bb, s2.cc, s2.ii, s2.jj };
}

这也允许您仅设置struct_1的某些成员(例如,如果您添加了更多成员并且只想覆盖struct_2中的相应成员(:

struct_1* a1_p = array1;
for (const struct_2& s2 : array2) {
struct_1& s1 = *a1_p++;
s1.aa = s2.hh;
s1.bb = s2.bb;
s1.cc = s2.cc;
s1.dd = s2.ii;
s1.ee = s2.jj;
// Any members not set will remain the same
}