我有一个字符列表,我正在尝试删除连续的重复项,例如{'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;
}
}
}
最佳答案
声明
itr2 = next(itr, 1);
可能会给你 end
迭代器,你必须在尝试取消引用之前检查它
有点像
if (itr2 != mylist.end() && tolower(*itr) == tolower(*itr2)) { ... }
关于c++ - 迭代时删除列表中的最后一个元素会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36908882/