Jac*_*ern 3 c++ arrays function
我有一个问题,这是我最近发布的其他两个问题的扩展:
和
假设我有一个数组A.我想创建一个功能f作用于A并返回其他两个数组B,并C通过启用以下Matlab的语法类似
[B,C]=f(A);
Run Code Online (Sandbox Code Playgroud)
在C++中有可能吗?
解决以下问题的解决方案
#include <tuple>
using std::tie;
std::tuple<TypeOfB,TypeOfC> f(const Matrix<T1>&a,const Matrix<T2>&a) {
// Instruction declaring and defining B_temp and C_temp
return std::make_tuple(B_temp,C_temp); }
int main( int argc, char** argv)
{
// Instruction declaring A, B and C
tie(B,C)=f(A);
// STUFF
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当改变一切正常,也std::tuple并make_tuple以std::pair和std::make_pair为这种特殊情况下(只有两个输出).
一般来说,如果你想返回多个值,你必须做一些小事,因为C++不允许这个开箱即用.
第一个选项是返回std::pair包含两个值的a.std::tie如果你有C++ 11可用,你可以在return语句中使用,如下所示:
std::tie(B, C) = f(A);
Run Code Online (Sandbox Code Playgroud)
(注意:C++ 11也有std::tuple两个以上的值.)
或者你可以通过引用传递两个目标变量,但是函数调用变成这样的东西(没有C++ 11):
f(A, B, C);
Run Code Online (Sandbox Code Playgroud)
为了使函数调用看起来更"冗长"(有些人不喜欢你不能告诉这些f变化B,C从查看这一行代码)你也可以使用指针代替引用.那么函数调用将如下所示:
f(A, &B, &C);
Run Code Online (Sandbox Code Playgroud)
另一个选择是为您的多个返回值使用一个简单的"容器".如果简单的对或元组不赋予值特定含义,则这尤其有用.最好的办法是在调用的代码一致地使用这个f(不单独使用数组B和C).只有在它与代码设计的其余部分非常吻合时才使用它.
struct TwoArrays {
int B[100];
int C[100];
};
TwoArrays result = f(A);
Run Code Online (Sandbox Code Playgroud)