在 C++ 中检索 returns 数组的函数的输出

Retrieving the output of a function that returns an array in C++

如何检索以下函数的输出以便我可以使用它。

我的代码:

#include <iostream>
    #include <iomanip>
    #include <complex>
    #include <cmath>
    #include <cstddef>

    double binFreq(int n)
         {
            int j;
            double* f = new double[n];

            for ( j = 0 ; j < n ; j++ ){

            f[j] =(fmod(j+(floor(n/2)), n)-floor(n/2))/n;
            //std::cout << "f["<<j<<"] ="<<f[j] <<std::endl;
            }
            delete [] f;
         }

    int main()
    {   

        int n=9;
        double* F=new double [n];
        F[n]=binFreq(n);

        for ( int i = 0 ; i < n ; ++i ){ 
        std::cout << "F["<<i<<"] ="<<F[i] <<std::endl;
        }


    }

正如您在上面的代码中看到的那样,我已经尝试过了,但我得到的每个元素都是零:

Output:

F[0] =0
F[1] =0
F[2] =0
F[3] =0
F[4] =0
F[5] =0
F[6] =0
F[7] =0
F[8] =0

修改后的代码:

#include <iostream>
#include <cmath>
#include <cstddef>
#include <vector>

std::vector<double> binFreq(int n)
{
   int j;
   std::vector<double> f(n);

   for ( j = 0 ; j < n ; j++ ){

      f[j] =(fmod(j+(floor(n/2)), n)-floor(n/2))/n;
   }
   return f;
}

int main()
{   

    int n=9;
    double* F;
    F=binFreq(n);

    for ( int i = 0 ; i < n ; ++i ){ 
    std::cout << "F["<<i<<"] ="<<F[i] <<std::endl;
    }

}

我收到新错误 main.cpp:在函数中'int main()': main.cpp:23:16: 错误:无法在赋值中将 'std::vector' 转换为 'double*' F=binFreq(n);

您应该在函数中创建数组 F(就像您所做的那样),但不要删除它,而是 return。 return f; 而不是 delete [] f;

然后在您的主函数中,只需将 F 声明为 double* F 并使用赋值 F = binFreq(n);

这样,您就可以在函数内部创建数组,并且 return 指向它的指针。然后从你的 main,你将该指针分配给 F 然后你可以使用你的数组。

不要忘记删除 main 末尾的数组!

最好避免 return 数组。 Return 改为 std::vector。 它比使用数组更不容易出错。此外,动态内存管理也会为您处理。

std::vector<double> binFreq(int n)
{
   int j;
   std::vector<double> f(n);

   for ( j = 0 ; j < n ; j++ ){

      f[j] =(fmod(j+(floor(n/2)), n)-floor(n/2))/n;
   }
   return f;
}

您需要修改 main 以反映函数的 return 值。

int main()
{   
   int n = 9;
   auto F = binFreq(n);
   for ( int i = 0 ; i < n ; ++i )
   { 
      std::cout << "F["<<i<<"] ="<<F[i] <<std::endl;
   }
}

你也可以给一个向量引用:

void binFreq(std::vector<double> &freq, int n)
{
    freq.resize(n,0.0) ;
    for (int j = 0 ; j < n ; j++ )
    {
        f[j] =(fmod(j+(floor(n/2)), n)-floor(n/2))/n;
    }
}

int main()
{
    int n=9 ;
    std::vector<double> F ;
    binFreq(F,n) ;

    return 0 ;

}