使用迭代器替换向量中的对象

时间:2019-04-03 22:01:21

标签: c++ vector iterator

这是我的对象类:

append

主要,我要遍历class person { public: int id; Rect rect; }; 的向量,当找到匹配项时,我想将persons更新为一些新的rect,甚至替换整个新对象{{ 1}}。

rect

我在用注释标记的行上遇到的错误是:

person

还有这个:

Rect mr = boundingRect(Mat(*itc));
person per;
vector <person> persons;
vector <person>::iterator i;

i = persons.begin();
while (i != persons.end()) {
    if ((mr & i->rect).area() > 0) {
        rectangle(frame, mr, CV_RGB(255, 0, 0));
        putText(frame, std::to_string(i->id).c_str(), mr.br(),
            FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 255));

        replace(persons.begin(), persons.end(), i->rect, mr); // this line causes error
        break;
    } else {
      ...
    }

我尝试Error C2678 binary '==': no operator found which takes a left-hand operand of type 'person' (or there is no acceptable conversion) 对象并添加一个新对象,但是仍然遇到相同的错误。我已经读过C++ Remove object from vector,但不确定是否是我的问题,并且我没有使用C ++ 11,因此这些解决方案对我不起作用。

迭代器和我的Error C2679 binary '=': no operator found which takes a right-hand operand of type 'const _Ty' (or there is no acceptable conversion) 对象进行比较时是否有用?我认为这只是解决办法。

1 个答案:

答案 0 :(得分:1)

如果要比较类型为person的对象和类型为Rect的对象(这是对replace的调用所隐含的含义),则必须提供适当的比较运算符为此,请在您的Person类中这样做,

bool operator== (const Rect &r) const { ... }

类似地,您需要一个具有如下签名(以及可能的实现)的赋值运算符:

person& operator= (const Rect &r) { rect = r; return *this; }

Simplified live demo