文字のリストがあり、連続した重複を削除しようとしています。 {'a', 'b', 'a', 'a', 'a'}
は{'a', 'b', 'a'}
になります。最後の 'a'を取り除くときには、itr2
は何も指さず、「リストイテレーターは逆参照できない」というエラーが出ます。私はこれがなぜ起こるのか理解していますが、私はそれを解決するのが難しいです。どのようにこれを解決することができ、これを行うためのより良い方法がありますか?ここで反復処理中にリスト内の最後の要素を削除すると、エラーが発生する
は私のコードです:
void removeDuplicates(list<char> &myList)
{
list<char>::iterator itr;
list<char>::iterator itr2;
for (itr = myList.begin(); itr != myList.end();)
{
itr2 = next(itr, 1);
if (tolower(*itr) == tolower(*itr2))
{
myList.erase(itr2);
}
else
{
++itr;
}
}
}
おかげ作業、これは完璧です。 – Moose