QVector to Complex

时间:2016-11-16 11:49:20

标签: c++ qt format complex-numbers

我正在尝试将QVector双数组的一部分分配给Qt中的复数双数组。

运行以下代码,我遇到std::cout << y.at(i) << std::endl;正确打印16位整数值但std::cout << y1[i] << std::endl;打印零的问题:(0,0)(0,0)(0,0) ......

我想要结果(y [0],0)(y [1],0)(y [2],0)...

请有人可以告知有什么问题吗?

QVector<double> x(100), y(100);  // Original QVector

std::complex<double> y1[100];
int i=0;

while(i<101)
{  
   // get y values from somewhere else (quint8 data8)

   y[i] = (256.0*data8[2*i]) + 1.0*data8[2*i+1];
   std::cout << y.at(i) << std::endl;

   y1[i] = (y.at(i),0.0);
   std::cout << y1[i] << std::endl;

   i++;
}

1 个答案:

答案 0 :(得分:1)

让我们看看这个表达式:

(y.at(i), 0.0)

在C ++中,括号只是一种分组技术,用于运算符优先级指定。例如,如果您执行2*2+2,您将获得六个。但是如果你想得到8,你需要括号:2*(2+2)。所以你的分配线相当于:

y1[i] = y.at(i), 0.0;

为什么要编译它是什么意思?它编译是因为使用了comma operator。在C ++中,逗号是一个二元运算符,具有非常简单的操作:它计算它的左手参数,抛出结果,然后计算它的右手参数并返回结果。因此,在您的情况下,它丢弃y.at(i)并返回零,已成功分配给y1[i]。在现代C ++中执行所需操作的最短方法是使用初始化列表:

y1[i] = {y.at(i),0.0};

如果你有一个古老的编译器,它只是更冗长:

y1[i] = std::complex<double>(y.at(i), 0.0);