在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”。
感谢您的帮助。
答案 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 iterator或std::for_each。
但是,你的for循环非常简单和干净,所以我会保留代码。