在我的应用程序中,我将所有当前打开的窗口存储在一个向量中,以便进行事件处理 . 打开窗口时,它会添加到矢量中并在关闭时删除 . 我有一个进程事件函数,我遍历该向量并使用当前事件更新所有窗口:

for(Window* w : windows)
        w->OnWindowEvent(event);

但是,如果我关闭窗口,我会收到错误'Debug Assertion failed:vector iterator not incrementable' . 根据我的理解,如果当前的迭代器无效,例如像擦除元素时,这是我在这里和其他网站上阅读的内容 . 但我不是在这里做的 . 另一件奇怪的事情是,如果我像这样使用'传统'for循环:

for(int i = 0; i < windows.size(); i++)
    windows[i]->OnWindowEvent(event);

然后我可以直接使用相同的基于范围的循环,没有任何错误 . 我错过了什么吗?