繁体   English   中英

c++ 从 function 返回两个 arrays

[英]c++ return two arrays from the function

我使用二分法找到了方程的解。

我需要在一些迭代中找到ab的值。 因此,我分别为这些点做了两个arrays。

为了从 function 中“拉出”迭代次数,我没有问题。 它们显示在屏幕上。 但是我该如何“拉出”这两个arrays?请告诉我该怎么做。 先感谢您!

在此处输入图像描述

double f1(double x){
    return x*x-5*sin(x);
}
double f2(double x){
    return exp(x)-pow(10,x);
}
double f3(double x){
    return sin(x)-x+0.15;
}
double f4(double x){
    return x-pow(9+x,0.5)+x*x-4;
}
double dihotom (double a , double b , double e , double(*fp)(double),int &iter,double &points_a[],double &points_b[]){
    double c , fc , fa = fp(a);
    iter=(log10((b-a)/e))/log10(2);
    int step = iter/3;
    int step_current = step;
    int it=0;
    int k=0;
    do{
        c=(a+b)/2;
        fc=fp(c);
        if (fa*fc<=0) b = c ; else a = c;
        it++;
        if(it==step_current){
            points_a[k]=a;
            points_b[k]=b;
            k++;
            step_current=step_current+step;
        }
        fa=fp(a);
        printf ("it %d: a = %lf,b = %lf\n",iter,a,b);
    }while (fabs(a-b)>=e);
    return c;
}

int main(int argc, char *argv[]) {

    int int_s=0;
    double points_a[3];
    double points_b[3];

    double k3= dihotom (0.5,1,0.0001,f3,int_s,points_a[3],points_b[3]);
    printf("For F3 - root = %lf, F3(%.2lf)=%lf ;iter =%d\n", k3, k3 ,f3(k3),int_s);
    int i=0;
    for(i=0;i<3;i++){
        printf("step : %d , a: %lf, b: %lf ", i,points_a[i],points_b[i]);
    }

    return 0;
}

在您的情况下,您应该参考arrays :

double dihotom(double a, double b, double e, double (*fp)(double), int &iter,
               double (&points_a)[3], double (&points_b)[3]) {
//             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^

您还可以让 arrays衰减为指针:

double dihotom(double a, double b, double e, double (*fp)(double), int &iter,
               double points_a[], double points_b[]) {

或者

double dihotom(double a, double b, double e, double (*fp)(double), int &iter,
               double* points_a, double* points_b) {

但是通过引用它们,您可以确保您只接受正确大小的 arrays。

在任何一种情况下,对 function 的调用都将是:

double k3 = dihotom(0.5, 1, 0.0001, f3, int_s, points_a, points_b);

演示

如果你想从 function 返回两个 arrays 然后用两个向量创建一个结构。 像这样的东西。 你这样做的方式更难维护,例如谁将分配 arrays 并删除它们?

// todo for you : create better names then points_a and points_b
struct my_result_t
{
    std::vector<double> points_a;
    std::vector<double> points_b;
};

my_result_t function();
{
    my_result_t result;
    result.points_a.push_back(1.0);
    result.points_b.push_back(2.0);
    return result;
}

int main()
{
    auto result = function();
    std::cout << result.points_a[0];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM