1

foor ループ内でリスト サイズを変更 (要素を消去) しようとしていますが、イテラリオンが進むにつれて、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 でリストから要素を消去すると失われるようです。

敬具

4

0 に答える 0