首页 > 解决方案 > 在 for 循环 C++ 中擦除时 std::list 的不可解引用迭代器

问题描述

我正在尝试修改 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;

当我运行上面的代码时,我不断收到错误

std::list 的不可解引用迭代器

问题出在第一个迭代器 (it) 上,它似乎在使用 it2 从列表中擦除元素时丢失了。

亲切的问候

标签: c++listfor-looperasenodereference

解决方案


推荐阅读