gpt4 book ai didi

c++ - 将 C++ 转换的输出传递给函数

转载 作者:行者123 更新时间:2023-11-30 02:34:08 24 4
gpt4 key购买 nike

如果这是一个愚蠢的问题,我很抱歉,但我是一个 C++ 菜鸟,我一直没能找到答案。我正在使用 boost multi_array,我正在尝试做这样的事情:

typedef boost::multi_array<double,2> array2D;
typedef array2D::array_view<1>::type array2Drow;
typedef boost::multi_array_types::index_range range;
...
array2D A = ... (2-d array) ...;
array2Drow X = A(boost::indices[0][range()]);
...
returnVal1 = f(X);
returnVal2 = f(X+0.1*X);
returnVal3 = f(X-0.1*X);

我试图为此使用 std::transform;我知道我可以编写某种仿函数(称之为“op”),将 X 乘以 0.1 并将结果从 X 中加/减,但这就是我遇到麻烦的地方——我不知道该放什么的???:

returnVal1 = f(X);
returnVal2 = f(transform(X.begin(),X.end(),???,op(0.1,X)));
returnVal3 = f(transform(X.begin(),X.end(),???,op(-0.1,X)));

有没有办法在不定义一个中间对象然后传递给 f 的情况下做到这一点?提前致谢!

最佳答案

如果您的函数 f 使用一个容器,那么您将必须使用转换后的值创建一个容器。在您的示例中,您似乎还期望 X 在第一次转换时保持不变,因此您不能就地修改它

returnVal1 = f( X );
transform( X.begin(), X.end(), X.begin(),
[]( double val ){ return val + 0.1*val; } );
returnVal2 = f( X );

如果您不想创建显式本地临时对象,则可以使用辅助函数构造它们。

// pass in by value to get a copy, modify it inplace and return it
array2Drow transformed( array2Drow copy, double factor )
{
std::transform( copy.begin(), copy.end(), copy.begin(),
[&]( double val ){ return val + factor*val; } ) );
return copy;
}

然后可以使用帮助程序编写返回值的计算。

returnVal1 = f( X );
returnVal2 = f( transformed( X, 0.1 ) );
returnVal3 = f( transformed( X, -0.1 ) );

关于c++ - 将 C++ 转换的输出传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34777935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com