如果这些矩阵非常小,那么这种方法可能没问题,但通常我不会这样做。首先,无论它们的大小如何,都应该通过 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,采用不那么“纯粹”的编码风格。