C ++,将迭代器用于指向的映射容器时出错。 map / set iterator不可递增

时间:2012-07-09 13:01:07

标签: c++ pointers map iterator

我在尝试迭代另一个对象指向的地图时遇到此错误。它在我不使用指针时有效。 (迭代成员地图“碎片”)因此我想知道该怎么做,或者是否不可能像这样迭代地图? :

Board * Board::ccBoard(){

Board * newBoard = new Board();
map<Vec2, Piece>::iterator it;
for (it = newBoard->pieces.begin(); it != newBoard->pieces.end(); ++it)
    newBoard->removePiece(it->first);
return newBoard;
}

提前致谢!

2 个答案:

答案 0 :(得分:1)

removePiece()函数会删除it引用的元素,使it无效。然后尝试增加it,导致断言失败。来自map::erase()

  

擦除元素的引用和迭代器无效。

我不确定for循环的意图是什么,它似乎会有效地清空map,在这种情况下只使用map::clear()

newBoard->pieces.clear();

答案 1 :(得分:0)

要修复,请删除for循环中的++it并将it->first替换为it++->first

(这将增加迭代器并使用副本调用erase()。)