fate-

当你用erase以迭代器方式删除vector中的元素时,vector会自动将被删除元素后边的元素往上挪一位,所以此时指向删除元素的迭代器指向了被删除元素后面的元素,所以在循环中,此时迭代器就不应该加1了,大概像下面这种写法

        for (itE = listE.begin(); itE != listE.end();)
        {
            //取出一条边 
            ActivityEdge* currE = *itE;

            if (currE->start == findV)
            {
                listE.erase(itE);
            }
            else
            {
                itE++;
            }
        }

上面的代码在dev,cfree编译器中运行没有问题,但是在vs中运行这段代码是会报错的,程序会崩溃显示vector  iterators  incompatible,我觉得这是vs的一个保护机制,也就是微软的老头们觉得用这个迭代器不太好,所以就禁用了。O(∩_∩)O,我觉得也是有点不好,因为这个迭代器本来是指向删除元素的,但是元素删除后,这个迭代器竟然指向了被删除元素的下一个元素,感觉这个迭代器有点不忠心,本来是要和被删除元素捆绑在一起的,但是在被删除元素没了之后,这个迭代器竟然偷偷摸摸的和别的元素有了关系,

分类:

技术点:

相关文章: