Microsoft VS c ++ 2010列表迭代器错误

时间:2015-05-29 05:16:56

标签: c++ list vector iterator

我有一个列表迭代器不可递增的问题 我有一个邻接矩阵" adj(2d向量)" +我有一个名字颜色的char矢量,我有一个int glist 我遇到以下功能问题

 for(list<int>::iterator it = glist.begin(); it != glist.end(); it++)
    {
        int x =0;
    for(int i=0;i<adj.at(*it).size();i++){
        if(color.at(adj.at(*it).at(i)) == 'w')
         x++;
    }
        if(x == 0)
        {
            it = glist.erase(it);
        }
    }

我想从这个函数中得到的是测试glist中每个elemnt的neghbors是否用白色颜色邻居(即颜色向量中邻居的颜色==&#34; w&#34;如果它没有&# 39;然后从闪电中删除元素 但是当我编译一个错误的列表迭代器不会递增显示 任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

当您删除项目时,您的逻辑会跳过列表中的项目。

说你有:

1 5 15 222
列表中的

。我们假设您从列表中删除5。这些行:

if(x == 0)
{
    it = glist.erase(it);
}

it指向15。您在++it行中for it222指向15。这意味着您跳过了处理222

如果您最终删除if(x == 0) { it = glist.erase(it); } ,则行:

it

glist.end()指向++it。当你对it进行操作时,你会看到未定义的行为。

使用以下命令更改逻辑以更新if(x == 0) { it = glist.erase(it); } else { ++it; }

for

并将for(list<int>::iterator it = glist.begin(); it != glist.end(); /* it++ /*) // ^^^^ Don't need. 行更改为:

modalTrigger = function(){uglipop({class:'modalWrapper',source:'div',content:'modalDemo'});}