将double数组转换为std :: complex <double>

时间:2018-05-22 19:04:28

标签: c++ arrays

我正在阅读一个大文本文件中的数字。所以我创造了一个能够做到这一点的功能。它将数字存储在以下数组中

**array = (double **)malloc(length*sizeof(double*));

我想将此数组中的值存储在std::complex<double>数组或2D数组中,如下所示:a[i].real()=lines[i]但我无法找到实现此目的的方法。

2 个答案:

答案 0 :(得分:1)

我将对此进行疯狂的抨击,并假设您想要将双精度数字的文件读入std::complex<double>的数据库中。

以下是一个例子:

double real_part = 0.0;
double imaginary_part = 0.0;
std::vector<std::complex<double> > database;
while (my_data_file >> real_part >> imaginary_part)
{
  std::complex<double> combined;
  combined.real(real_part);
  combined.imag(imaginary_part);
  database.push_back(combined);
}

还有其他方法可以读取数据,但上面说明了基本概念。

在上面的代码片段中,从数据文件中读入实部和虚部。

定义了复数。实部和虚部组件被设置为combined复数。

最后,复数将附加到数据库中。

答案 1 :(得分:1)

看起来Thomas Matthews已经提供了如何做你想要做的事情,所以我只是解释你为什么尝试不起作用。

数据类型相同,double,但value categories不是。 std::complex::real()返回一个不可赋值的prvalue,而不是一个可赋值的左值。

a[i].real()返回的值仅存在于眨眼间,即行尾,因此分配给它是完全没用的。 C ++标准要求编译器拒绝赋值以防止可能产生的错误。

您可以使用std::complex::real(double)重载

a[i].real(lines[i]);

但请使用其他答案。这将导致更少的悲伤。

进一步阅读:What are rvalues, lvalues, xvalues, glvalues, and prvalues?