【问题标题】:Flatten array of structs into several arrays in C++在 C++ 中将结构数组展平为多个数组
【发布时间】:2013-03-27 09:23:32
【问题描述】:

源码了解情况:

struct s { 
    int i; 
    float f 
};
const int cnt = 10;

s *source = new s[cnt];
/*... fill source ...*/

int *dest_i = new int[cnt];
float *dest_f = new float[cnt];

for (int x = 0; x < cnt; x++) {
    dest_i[x] = source[x].i;
    dest_f[x] = source[x].f;
}

那么,问题来了:有没有比循环遍历数组更快的方法?

【问题讨论】:

  • 好吧,你必须复制它们中的每一个。如果不通过一种或另一种方式循环,您希望如何做到这一点?
  • 我猜你可以在填充s 本身时填充扁平数组,或者完全放弃s
  • @user315052,是的,但从问题来看,我猜你不能。
  • @chris 实际上我正在寻找某种memcpy 类似步幅的模拟函数
  • @Yarg,如果您不介意循环两次,您可以使用两个带有快速 lambda 的 std::transforms。

标签: c++ arrays struct flatten


【解决方案1】:

你可以展开你的循环。这就是我能想到的全部。

自己写是一个相当无意义的优化,如果你启用它,编译器可以尝试为你做(在gcc中,使用--funroll-loops编译)

【讨论】:

  • 实际上我正在寻找某种类似 stride 的 memcpy 模拟函数。数组的大小也不是一个常量(仅在 exaple 中制作),所以我不确定它是否会以这种方式展开。
猜你喜欢
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 2020-04-10
  • 2020-03-10
  • 2018-12-01
  • 2013-11-19
相关资源
最近更新 更多