我正在尝试向std :: vector添加一个运算符,以识别2个向量大致相同的时间。我该怎么做?
template<typename T> //only numeric types
class ImperciseVector: public std::vector<T> {
public:
ImperciseVector() {} //is this constructor needed?
bool operator~ (const ImperciseVector& v) {
T l1sq=0.0, l2sq=0.0, l3sq=0.0;
if ((*this).size() != v.size() || (*this).size==0 || v.size()==0) return false;
for (int j = 0; j<(*this).size(); j++) {
l1sq += (*this)[j]*(*this)[j];
l2sq += v[j]*v[j];
l3sq+= ((*this)[j]-v[j])*((*this)[j]-v[j]);
}
//some estimate such that length of their their difference (relative to their size) is small enough
if (l3sq/(l1sq*l2sq) <= 0.00001) return true;
return false;
}
};
它不起作用,甚至不能识别我何时给操作员写了什么内容。如何正确或更好地做到这一点?
答案 0 :(得分:2)
operator~()
是一元运算符。它的使用情况只能是~iv
,而不是iv1 ~ iv2
。在这种情况下,简单地编写一个名为approx()
或重载operator==
之类的成员函数会更好(确实有意义,对吗?如果它们是两个ImpreciseVector
是相等的#39;大致相等?)
旁注,请勿ImpreciseVector<T>
继承vector<T>
。改为使用构图。