如何从struct数组中提取数组?

时间:2014-05-07 09:28:20

标签: c++ arrays struct

在C ++中,为了使用复数,我将struct-type“creal”定义为

  typedef struct {  
  double re;  
  double im; } creal;  

现在让“length”为结构数组“complex_vector”的元素数量,该元素被初始化为

creal complex_vector[length];

后来填充了数据。

我想从“complex_vector”中提取两个数组“real_vector”和“imag_vector”。到现在为止我使用了for循环:

double real_vector[length];
double imag_vector[length]; 
for (int n = 0; n < length; n++) 
{ 
    real_vector[n] = complex_vector[n].re;
    imag_vector[n] = complex_vector[n].im;
} 

我想知道是否有办法避免for循环并直接提取struct array“complex_vector”的值来创建数组“real_vector”和“imag_vector”。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

由于complex_vector中的数据是交错的

,因此无法避免循环
re0 im0 re1 im1 re2 im2 ... reN imN

并且您的目标代表是非交错的

re0 re1 re2 ... reN
im0 im1 im2 ... imN

因此必须以任何方式进行复制。 你怎么能用一些for_each魔法以更紧凑的形式编写代码,但在我看来这只会让代码更难理解。

编辑:
然后使用一些更复杂的Matrix类(例如在OpenCV cv :: Mat_中),可以通过使用相同的数据缓冲区但修改步长来避免这种复制。但这当然是以较慢的元素访问为代价的。

答案 1 :(得分:1)

原则上没有。也许有一些方法可以编写更好的for循环或在库调用中隐藏它,但它仍然是for循环。示例可以是boost zip iteratorstd::for_each

但是,你的for循环非常简单和干净,所以我会保留代码。