我必须减去类型为Point2f的两个向量(它们的大小相同)。我知道它可以通过提取每个索引处的值然后在循环中减去它们来完成,但是有直接的方法吗?就像
Vector<Point2f> A[3];
A[2] = A[1] - A[0];
仅用于体育;)
std::vector<Point2f> A,B;
A.push_back(Point2f(1,2));
A.push_back(Point2f(3,4));
A.push_back(Point2f(5,6));
B.push_back(Point2f(5,2));
B.push_back(Point2f(4,4));
B.push_back(Point2f(3,6));
// Mat C; subtract(A,B,C);
Mat C = Mat(A) - Mat(B);
cout<< A << endl << B << endl <<C<<endl;
[1, 2; 3, 4; 5, 6]
[5, 2; 4, 4; 3, 6]
[-4, 0; -1, 0; 2, 0]
根据您提供的文档链接,支持减两点。所以下面的代码应该可以工作:
std::transform (A[1].begin(), A[1].end(), A[0].begin(), A[2].begin(), std::minus<Point2f>());
注意,这里假设A[2]足够大来存储结果。
或者,您可以编写自己的重载操作符-()来进行向量减法:
const vector<Point2f> operator-(const vector<Point2f>& lhs, const vector<Point2f>& rhs)
{ ... }
你需要优化上面的函数,以避免在函数返回时复制vector对象。这并不排除编写您想要避免的循环代码的需要。但是它会给你一个更清晰的向量减法语法。