C++ 在for循环C+;中擦除时,std::list的不可解引用迭代器+;

C++ 在for循环C+;中擦除时,std::list的不可解引用迭代器+;,c++,list,for-loop,erase,nodereference,C++,List,For Loop,Erase,Nodereference,我正在尝试修改foor循环中的列表大小(删除元素),随着文件的不断减少,de foor循环的范围将缩小: list<int>::iterator it, it2; int pairs = 0; for(it = lista.begin(); it != lista.end(); it++ ) { int count =0; for(it2 = lista.begin(); it2 != lista.end(); it2++) { if (*it

我正在尝试修改foor循环中的列表大小(删除元素),随着文件的不断减少,de foor循环的范围将缩小:

list<int>::iterator it, it2;
int pairs = 0;
for(it = lista.begin(); it != lista.end(); it++ )
{
    int count =0;
    for(it2 = lista.begin(); it2 != lista.end(); it2++)
    {
        if (*it2 == *it)
        {
        it2 = lista.erase(it2);
        count = count + 1;
        }
    }
    if (count/2 >= 2)
    pairs = int(count/2) + pairs;
}
cout << pairs;
list::iterator it,it2;
整数对=0;
for(it=lista.begin();it!=lista.end();it++)
{
整数计数=0;
对于(it2=lista.begin();it2!=lista.end();it2++)
{
如果(*it2==*it)
{
it2=列表擦除(it2);
计数=计数+1;
}
}
如果(计数/2>=2)
配对=整数(计数/2)+配对;
}

cout
if(it2==it)
——在这种情况下比较两个迭代器没有意义。你想比较什么?迭代器指向的值?如果是这样,那行就不行了。除了您遇到的问题之外,代码还有一个逻辑问题:
it2==it
比较两个迭代器,而不是迭代器指向的两个列表项。如果要在不同的位置查找相同的数字对,应使用
*it2==*it&&it2!=这回答了你的问题吗?执行
lista.erase(it2)
后,
it2++
是什么意思?执行一些关于在遍历列表时从列表中删除的研究。关于
erase
,CPP参考文档中可能有一个示例和说明。。。。阅读您所使用的东西的文档。
if(it2==it)
——在这种情况下比较两个迭代器没有意义。你想比较什么?迭代器指向的值?如果是这样,那行就不行了。除了您遇到的问题之外,代码还有一个逻辑问题:
it2==it
比较两个迭代器,而不是迭代器指向的两个列表项。如果要在不同的位置查找相同的数字对,应使用
*it2==*it&&it2!=这回答了你的问题吗?执行
lista.erase(it2)
后,
it2++
是什么意思?执行一些关于在遍历列表时从列表中删除的研究。关于
erase
,CPP参考文档中可能有一个示例和说明。。。。阅读您使用的东西的文档。