如何将值从数组复制到结构数组?

问题描述 投票:0回答:1

在下面的代码中,我可以使用

std::ranges::transform
的便捷语法将值从结构数组 (AoS) 复制到数组结构 (SoA)(在本例中,只有一个向量)。当我需要将值从 SoA 复制到 AoS 时,有没有办法以相反的方式执行相同的操作,从结构的特定字段复制数据?

具体来说,有没有办法用一些算法调用替换下面代码中的for循环(最好是视图范围)?

#include <algorithm>
#include <iostream>
#include <ranges>
#include <vector>

struct S
{
    float v1;
    float v2;
};

int main() {
    std::vector<S> aos = { { 1.0f, 2.0f } };
    std::vector<float> soa(aos.size());

    std::ranges::transform(aos, soa.begin(), &S::v1);

    std::cout << "soa value:" << soa[0] << std::endl;

    soa[0] = 3.0;

    // I want to replace this with something transform-like above
    for (std::size_t i = 0; i < soa.size(); ++i)
    {
        aos[i].v1 = soa[i];
    }

    std::cout << "aos value:" << soa[0] << std::endl;
}

演示

c++ range std
1个回答
0
投票

您可以使用 lambda 将

vector<float>
转换为
vector<S>

std::ranges::transform(soa, aos.begin(), [](auto val) -> S { return {val, 0.f}; });
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.