在删除元素时无法使用STL映射的迭代器

Xav*_*ier 0 c++ iterator stl map

我正在遍历STL映射以删除元素并进行一些清理.不幸的是,我的程序崩溃了++ iter系列.我在如何循环地图上做错了吗?

std::map<string,BoneHierarchy* >::iterator iter = boneMap.begin();
while(iter != boneMap.end()) {
    string playerName = iter->first;
    boneMap[playerName]->clear();
    boneQueue->push(boneMap[playerName]);
    boneMap.erase(iter);
    ++iter;
}
Run Code Online (Sandbox Code Playgroud)

Cor*_*lks 6

删除后不要递增迭代器(它已被删除,所以你怎么能期望它增加?).擦除迭代器的副本:

boneMap.erase(iter++);
Run Code Online (Sandbox Code Playgroud)

或者做

iter = boneMap.erase(iter);
Run Code Online (Sandbox Code Playgroud)

如果使用C++ 11.

(另请参阅通过for循环从C++映射中删除元素)