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

Ran*_*Guy 3 c++ c++11 c++14

我有以下结构。

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

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

struct_1 *array1 = new struct_1[300];
struct_2 array2[300];
Run Code Online (Sandbox Code Playgroud)

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

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

Mes*_*kon 8

您可以使用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};
});
Run Code Online (Sandbox Code Playgroud)