在 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 ;
}
如何检索以下函数的输出以便我可以使用它。
我的代码:
#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 ;
}