向std :: vector <t>添加运算符

时间:2015-06-06 19:17:00

标签: c++ operators

我正在尝试向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;
        }
};

它不起作用,甚至不能识别我何时给操作员写了什么内容。如何正确或更好地做到这一点?

1 个答案:

答案 0 :(得分:2)

operator~()一元运算符。它的使用情况只能是~iv,而不是iv1 ~ iv2。在这种情况下,简单地编写一个名为approx()或重载operator==之类的成员函数会更好(确实有意义,对吗?如果它们是两个ImpreciseVector是相等的#39;大致相等?)

旁注,请勿ImpreciseVector<T>继承vector<T>。改为使用构图。