如何检索以下功能的输出以便我可以使用它。
我的代码:
#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);
答案 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 ;
}