迭代器取消引用断言错误

Iterator dereferencing assertion error

本文关键字:错误 断言 引用 取消 迭代器      更新时间:2023-10-16

我正在使用迭代器循环访问列表,然后同时将它们取消引用到 obj 或数组中,我在 2 个不同的实例中执行此操作,但我收到断言错误,说我无法取消引用迭代器。

我很困惑,因为在其中一个函数中它工作正常,但是在第二个函数中它抛出了错误,但它们的编码方式相同。

引发断

言错误的函数:

Coord backTrack(){ // recalls to intersection where dead-end route was found
    list<Coord>::iterator it = pathHistory.end();
    Coord deadEnd = *it;
    coordsToUnmark.push_back(deadEnd);
    pathHistory.pop_back();
    return pathHistory.front();
}

在此函数中,它可以正常工作:

int findPath (Maze& theMaze, const Coord& start, const Coord& end, Coord path[]){
    patherFinder(theMaze, start.x, start.y, end);
    list<Coord>::iterator it;
    int ii = 0;
    for (it = pathHistory.begin(); it != pathHistory.end(); it++){
        path[ii] = *it;
        ii++;
}

阅读评论后,我意识到 list.end() 不是最后一个元素,而是列表容器中的过去结束元素,这解释了为什么我无法取消引用它。