C++中的复杂数组 - 实部,想象部

Complex arrays in C++ - real part, imag part

本文关键字:实部 象部 数组 复杂 C++      更新时间:2023-10-16

请您帮助我解决C++中复杂数组的问题吗?如果我有一个 cmplx 数字的数组 Arr[N],现在我需要 Arr[i] 的实部。在标头中有一个复杂的数组 CompArray 定义为

cmplx** CompArray;

然后我将其分配为具有尺寸 [nmax][nmax]

然后我有一个函数1,我只使用其中的一部分并编写

myclass::function1(double* realArray)
realArray = new double [nmax];
cmplx* ComplexArray [nmax];
ComplexArray[] = CompArray[10][];
for(int i=0;nmax;i++){
    realArray[i] = ComplexArray[i].real();
}

我收到一个错误:

error: expression must have class type

对于 real() 或 imag() 函数,错误是相同的

cmplx* ComplexArray [nmax];

这不是一个复数数组;它是一个指向数字的指针数组。看起来你需要一个指向(第一个)数字数组的指针:

cmplx* ComplexArray = CompArray[10];

然后ComplexArray[i]是所需的复数(具有"类类型"的表达式)。

一旦你解决了这个问题,这看起来有点狡猾:

realArray = new double [nmax];

已经传递了一个指针,然后你把它扔掉并分配一个新的数组。调用方不会看到该数组,因此您所做的只是泄漏内存。您可以通过引用传递指针,也可以从函数返回指针;这样,调用方至少会得到结果。

但是,将原始指针传递到动态内存并希望它们在正确的时间被删除是一个坏主意。相反,传递负责管理内存的对象;在这种情况下,容器将是理想的:

std::vector<double> myclass::function1() {
    std::vector<double> realArray;
    cmplx* ComplexArray = CompArray[10];
    for(int i=0;i<nmax;i++){
        realArray.push_back(ComplexArray[i].real();
    }
    return realArray;
}