我有一个列表迭代器不可递增的问题 我有一个邻接矩阵" 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;然后从闪电中删除元素 但是当我编译一个错误的列表迭代器不会递增显示 任何帮助将不胜感激
答案 0 :(得分:1)
当您删除项目时,您的逻辑会跳过列表中的项目。
说你有:
1 5 15 222
列表中的。我们假设您从列表中删除5
。这些行:
if(x == 0)
{
it = glist.erase(it);
}
将it
指向15
。您在++it
行中for
it
,222
指向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'});}