c++ - 关于C++中函数调用和求值的问题

标签 c++ arrays function

你好, 我有一个关于以下问题的可能直截了当的问题:

我有一个函数

double afunction(double *myarray)
{   
    double ret = 1.0;
    for(int i = 0; i < 4; i++)
        ret *= myarray[i]*myarray[i];
    return ret;
}

现在我想修改它,以便传递两个新参数:int index 描述要更改 myarray 的哪个索引,如下所示:myarray[ index ] = *添加;。这将是以下内容:

double afunction(double *myarray, int index, double *add)
{   
    myarray[ index ] += *add;
    double ret = 1.0;
    for(int i = 0; i < 4; i++)
        ret *= myarray[i]*myarray[i];
    return ret;
}

问题是:我不想修改数组 myrray 并且我不想为创建新数组这是因为内存问题(稍后将在 GPU 上计算,无论如何我无法在内核函数中分配一个全新的数组。 轻松解决这个问题? 谢谢!

编辑 对不起,我打错了。相反,myarray[ index ] = *add; 我的意思是 myarray[ index ] += *add;

编辑2 一个更大的函数的例子,以后可以很容易地扩展到大约 50 个不同的返回案例。所以让 if 语句通过在每个返回案例中添加 *add 来修改特定值 myarray[index] 是非常丑陋的:(

double afunction(double *myarray, int funcIndex, int indexAdd, double *add)
{   
    myarray[ indexAdd ] += *add;

    if(funcIndex >= 1 && funcIndex <= 4)
        return myarray[1]*myarray[1]*myarray[2];

    switch(funcIndex)
    {
        case 5:
            return sin(myarray[3]) * cos(myarray[1]);
        case 6:
            double ret = exp(myarray[1]);
            for(int i = 1; i < 5; i++)
                ret *= (myarray[ i ]-myarray[ 5-i ]);
            return ret;
        case 7:
            double ret = 0.0;
            for(int i = 1; i < 10; i++)
                ret += myarray[ i ];
            return ret;
    }

    return 0.0;
}

最佳答案

double ret = 1.0;
for(int i = 0; i < 4; i++)
    if (index == i)
        ret *= (*add) * (*add);
    else
        ret *= myarray[i]*myarray[i];

或:

double ret = (*add) * (*add);
for(int i = 0; i < 4; i++)
    ret *= myarray[i]*myarray[i];

ret /= myarray[index] * myarray[index];

这不是 100% 等价,因为您使用的是 float 。

编辑:好的,看到您编辑了原始问题。一种可能可以接受的替代方法是:

myarray[ indexAdd ] -= *add;

完成其余计算后。同样,不能保证 myarray[indexAdd]完全返回到它的旧值。

或者更好的是,将旧值保存在函数的顶部,然后恢复它:

float old = myarray[ indexAdd ];
myarray[ indexAdd ] += *add;
//do work
myarray[ indexAdd ] = old;

关于c++ - 关于C++中函数调用和求值的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5991277/

相关文章:

c++ - 在成员函数中使用 sizeof()

javascript - 在JS数组中设置对象参数的问题

python - 函数返回 None,即使我有 return 命令

c++ - C++中的指针地址

c++ - 具有约束/概念的类模板特化

c++ - 全局变量超出范围!有没有搞错?

arrays - Swift - 如何获取数组过滤项的索引

arrays - 在 Groovy 中检索数组数组中元素的索引

php - mysqli 连接在函数内部不起作用?

c++ - C++调用函数的不同方式