从 C++ 中的函数重新调整多个向量?

Retuning multiple vectors from a function in c++?

我想 return 来自一个函数的多个向量。 我不确定元组是否可以工作。我试过了但没有用。

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;

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

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

如果您不使用 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
}

功能样式代码的主要问题,例如returning std::tuple<Matrix,Matrix> 正在避免复制。这里有一些聪明的事情可以避免额外的副本,但有时它只是更简单,IMO,使用较少的 "pure" 编码风格。

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

如果你还想使用vector of vector,这是我的意见。您可以使用 references/pointers 使用 InOut 参数:意思是,如果可以更新参数以保存计算结果,您将发送参数,在这种情况下您不必 return 任何东西。

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

希望这对您有所帮助。