我正在遍历 STL 映射以删除元素并进行一些清理。不幸的是,我的程序在++iter 行崩溃了。我在 map 上循环的方式是否做错了什么?
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;
}
最佳答案
不要在删除迭代器后增加它(它已经被删除了,所以你怎么能指望增加它呢?)。使用以下命令删除迭代器的拷贝:
boneMap.erase(iter++);
或者做
iter = boneMap.erase(iter);
如果使用 C++11。
关于c++ - 删除元素时使用 STL 映射的迭代器时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10260530/