向量迭代器不可递增

时间:2017-01-17 02:53:58

标签: c++

为什么我在此代码中收到Vector iterator is not incrementable错误?

for (vector<vector<Point>>::iterator it = contours.begin(); it != contours.end(); ++it) {
    if (contourArea(*it) < 50) {
        it = contours.erase(it);
    }
}

我看到的其他答案通过指定.erase()返回it的迭代器来解决此错误,但我仍然得到相同的错误。怎么了?

1 个答案:

答案 0 :(得分:4)

您的代码有两个问题:

  1. 删除元素时跳过元素。
  2. 如果您在向量的最后一个元素上调用erase,则会遇到问题(导致未定义的行为)。
  3. 以下是您应该使用的内容:

    for (vector<vector<Point>>::iterator it = contours.begin(); it != contours.end(); ) {
        if (contourArea(*it) < 50) {
            it = contours.erase(it);
        }
        else {
            ++it;
        }
    }