c++ - 删除元素时使用 STL 映射的迭代器时遇到问题

标签 c++ stl dictionary iterator

我正在遍历 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。

(另见 Removing elements from a C++ map through a for-loop)

关于c++ - 删除元素时使用 STL 映射的迭代器时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10260530/

相关文章:

c++ - 如何使用策略在类中添加额外的功能层?

C++:类成员引用有效性?

c++ - 我应该根据 CPU 的数量将我的异步调用分成 block 吗?

c++ - 如何使用 "vector of vector"?

python - 获取项目列表并将每个项目的值显示为字符串

python - 从字符串列表制作字典(从列表的元素创建键)

c++ - 堆栈数组 C++ 的 Strcpy 行为

c++ - 读取 vector 时出现段错误

c++ - 对 map::emplace 的语法感到困惑

java - 从 map 中获取最高 n 个数字的最简洁方法?