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

时间:2016-06-08 14:58:44

标签: c++ function dynamic-arrays

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

我的代码:

#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);

3 个答案:

答案 0 :(得分:2)

最好避免返回数组。请改为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以反映该函数的返回值。

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

答案 1 :(得分:0)

你应该在你的函数中创建数组F(就像你一样),但是不要删除它,而是返回它。 try: p = Popen([batchCommand, account_list, waitString], stdout=subprocess.PIPE, stderr=subprocess.PIPE) except OSError as e: print "OSError > ",e.errno print "OSError > ",e.strerror output , errors = p.communicate() 代替return f;

然后在您的主要功能中,只需将F声明为delete [] f;并使用分配double* F

这样,您可以在函数内部创建数组,然后返回指向它的指针。然后从您的main,将指针指向F,然后您可以使用您的数组。

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

答案 2 :(得分:0)

您还可以提供对矢量的引用:

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 ;

}