c++ - vector 迭代器不可递增

标签 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. 当您删除一个元素时它会跳过一个元素。
  2. 如果您在 vector 的最后一个元素上调用 erase,它就会遇到问题(导致未定义的行为)。

这是你应该使用的:

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

关于c++ - vector 迭代器不可递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41688346/

相关文章:

c# - 在 C++ 中使用 system() 来防止触发新进程的替代方法

c++ - 如何将 C++ 指针传递给 Fortran?

c++ - 如何使用 std::string 以正确的方式存储字节(无符号字符)?

c++ - 监视表达式中的 vector 大小不正确

c++ - 如何防止 OgreBullet 胶囊翻倒?

c++ - 通过 MS RPC 发送 wstring 和 ptime

c++ - 如何使用二进制搜索返回姓氏(给定字符串)的第一个索引/出现?

c++ - QTreeView::sortByColumn() 是 Qt 5 的 QTreeView 中的插槽吗?

python - python numpy tolist() 增加了多少开销?

c++ - 指向存储在 uint64_t 中的内存位置的指针