如何从结构数组中提取数组

How to extract an array from a struct array?

本文关键字:数组 提取 结构      更新时间:2023-10-16

在c++中,为了使用复数,我将结构类型"creal"定义为

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

现在设length为初始化为

的结构数组complex_vector的元素个数
creal complex_vector[length];

,然后用数据填充。

我想从"complex_vector"中提取两个数组"real_vector"answers"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循环并直接提取结构数组"complex_vector"的值来创建数组"real_vector"answers"imag_vector"。

谢谢你的帮助。

循环是不可避免的,因为你的complex_vector中的数据是交错的

re0 im0 re1 im1 re2 im2 ... reN imN

和你的目标代表是非交错的

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

所以复制必须以任何方式完成。无论如何,您可以使用一些for_each魔法以更紧凑的形式编写代码,但在我看来,这只会使代码更难以理解。

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

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

然而,你的for循环是非常简单和干净的,所以我将保留它的代码。