0

我想从一个函数返回多个向量。我不确定任何一个元组是否可以工作。我试过但没有工作。

xxx myfunction (vector<vector<float>> matrix1 , vector<vector<float>> matrix2) {

// some functional code: e.g. 
// vector<vector<float>> matrix3 = matrix1 + matrix2;
// vector<vector<float>> matrix4 = matrix1 - matrix2;

return matrix3, matrix4;
4

2 回答 2

1

如果这些矩阵非常小,那么这种方法可能没问题,但通常我不会这样做。首先,无论它们的大小如何,都应该通过 const 引用传递它们。

此外,std::vector<std::vector<T>>这不是一个很好的“矩阵”实现——将数据存储在一个连续的块中并在整个块上实现逐元素操作要好得多。此外,如果您要返回矩阵(通过一对或其他类),那么您将需要研究移动语义,因为您不想要额外的副本。

如果您不使用 C++11,那么我会通过引用传入矩阵并将它们填充到函数中;例如

using Matrix = std::vector<std::vector<float>>; // or preferably something better

void myfunction(const Matrix &m1, const Matrix &m2, Matrix &diff, Matrix &sum)
{
    // sum/diff clear / resize / whatever is appropriate for your use case
    // sum = m1 + m2
    // diff = m1 - m2
}

函数式代码的主要问题,例如返回std::tuple<Matrix,Matrix>是避免复制。这里有一些聪明的东西可以避免额外的副本,但有时它只是更简单,IMO,采用不那么“纯粹”的编码风格。

于 2015-01-07T05:17:06.043 回答
0

对于矩阵,我通常为它创建一个具有这些向量的结构或类,并将该类的对象发送到函数中。它还有助于在该类中封装与矩阵相关的操作。

如果您仍然想使用矢量的矢量,这是我的意见。您可以使用引用/指针使用 InOut 参数:意思是,如果可以更新参数以保存计算结果,您将发送参数,并且在这种情况下您不必返回任何内容。

如果参数需要是 const 且不能更改,那么我通常将 In 参数作为 const 引用发送,并在函数参数列表本身中单独发送 Out 参数。

希望这个对你有帮助。

于 2015-01-07T05:24:19.333 回答