在下面的代码中,我可以使用
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;
}
您可以使用 lambda 将
vector<float>
转换为 vector<S>
:
std::ranges::transform(soa, aos.begin(), [](auto val) -> S { return {val, 0.f}; });