C++可能出错的小细节

1.

for(list<Geometry_line>::iterator it = G.begin(); it != G.end();) {
    if(IsLineCrossed(*it, l)) {
        G.erase(it);
    } else {
        it++;
    }
}

  调试时出现iterator not incrementable。

  原因:当容器执行了一次earse操作之后,原来用来遍历的迭代器就失效了,其行为是不可预测的,具体情况由实现决定。同时earse操作会返回一个指向容器中下一个元素的迭代器,如果想继续遍历,就得用返回的迭代器继续操作。

原文地址:https://www.cnblogs.com/dramstadt/p/6090977.html