for(auto : map)该功能会遇到的异常
如下所示代码
int main() {
map<int, string> m_map;
m_map[0] = "abc";
m_map[10] = "bcd";
auto a = m_map.begin();
for (auto i : m_map)
{
m_map.erase(i.first); //执行一次后程序出现异常
}
}
通过搜集下面的知乎链接,阅读网友@LzxHahaha的评论了解到for auto也是用的迭代器
链接:for auto干了些什么
那么为什么使用迭代器erase()操作后会发生异常呢?
查看C++ primer 如下图所示解释
如果确实需要删除迭代器中内容可采用如下所示方式
int main() {
map<int, string> m_map;
m_map[0] = "abc";
m_map[10] = "bcd";
auto a = m_map.begin();
while(a != m_map.end())
{
a = m_map.erase(a); //正常
}
}