首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QVector到Complex

QVector到Complex
EN

Stack Overflow用户
提问于 2016-11-16 19:49:20
回答 1查看 312关注 0票数 1

我正在尝试将QVector双精度数组的一部分赋值给Qt中的复杂双精度数组。

运行以下代码时,我遇到了这样的问题:std::cout << y.at(i) << std::endl;正确地打印了一个16位的整数值,而std::cout << y1[i] << std::endl;却打印了0:(0,0) (0,0) (0,0) ...

我想要结果(y,0) (y1,0) (y2,0)...

有没有人能告诉我出了什么问题?

代码语言:javascript
复制
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++;
}
EN

回答 1

Stack Overflow用户

发布于 2016-11-16 20:03:24

让我们看一下这个表达式:

代码语言:javascript
复制
(y.at(i), 0.0)

在C++中,括号只是一种分组技术,用于指定运算符的优先顺序。例如,如果执行2*2+2,就会得到6个。但是如果你想得到8个,你需要用括号:2*(2+2)。所以你的赋值行相当于:

代码语言:javascript
复制
y1[i] = y.at(i), 0.0;

为什么要编译它?它的含义是什么?它之所以会编译,是因为使用了comma operator。在C++中,逗号是一个二元运算符,具有非常简单的操作:它计算左边的参数,丢弃结果,然后计算右边的参数并返回结果。因此,在您的例子中,它丢弃了y.at(i)并返回0,这被成功地分配给了y1[i]。在现代C++中做你想做的事情的最快捷的方法是使用初始化器列表:

代码语言:javascript
复制
y1[i] = {y.at(i),0.0};

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

代码语言:javascript
复制
y1[i] = std::complex<double>(y.at(i), 0.0);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40631422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档