std::vector<int>
パラメータとして受け取る「フリー」オペレータを定義できます。
std::vector<int> operator +(const std::vector<int> &a, const std::vector<int> &b)
{
std::vector<int> result(a); // Copy the 'a' operand.
// The usual matrix addition is defined for two matrices of the same dimensions.
if (a.size() == b.size())
{
// The sum of two matrices a and a, is computed by adding corresponding elements.
for (std::vector<int>::size_type i = 0; i < b.size(); ++b)
// Add the values of the 'b' operand.
result[i] += b[i];
return result;
}
}
int main(int argc, char **argv)
{
std::vector<int> a;
std::vector<int> b;
// The copy constructor takes care of the assignement.
std::vector<int> c(a + b);
return 0;
}
の実装operator +
は非常に素朴ですが、単なるアイデアです。注意してください!、追加操作の前にチェックを配置しました。チェックが渡されない場合、a
オペランドのコピーが返されます。これはあなたの望ましい動作ではないと思います。
の同じファイルに演算子を配置しましたmain
が、操作が実行される場所が見える限り、好きな場所に配置できます。
もちろん、操作を連鎖させてより複雑な操作を実現するために必要な演算子を定義できます。
私の数学の概念はかなり古いですが、お役に立てば幸いです。