これらの行列が非常に小さい場合、このアプローチは問題ないかもしれませんが、一般的にはこの方法は使用しません。まず、サイズに関係なく、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>
は、コピーを避けることです。余分なコピーを避けるためにここでできる巧妙な方法がありますが、「純粋」ではないスタイルのコーディングを使用する方が簡単な場合もあります。