c++ - 迭代时删除列表中的最后一个元素会导致错误

标签 c++ list iterator

我有一个字符列表,我正在尝试删除连续的重复项,例如{'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/

相关文章:

python - 找出所有的方法来决定 list 分为三

iterator - 如何允许在各种类型的 IntoIterator 项目上多次实现特征?

c++ - 如果递归深度很深,TMP 真的会更快吗?

模板函数的 C++11 奇怪错误

c++ - OpenCV 3 OpenCL UMat 绘图函数

list - 计算 LISP 中每个级别的子列表

jquery - 在 jquery 中使用复选框获取 li attr

双链表上的 Java 迭代器

java - 可逆迭代器

c++ - 在不将数据作为参数传递的情况下授予静态函数访问数据的权限