在for循环中删除迭代器所指内容崩溃
经常在网上看到“容器中删除的只要不是最后一个元素,循环就会崩溃”
其实不然,经过测试;容器中使用迭代器循环访问,只要删除迭代器所指元素后,继续for,不管你删除的是第一个还是最后一个,或者中间的某一个,只要不跳出来,就会崩溃;
首先,for循环,++或者--,都是在for循环体执行完一次后执行;所以当你把迭代器所指内容删除,迭代器失效,失效的迭代器在++,或者--,就会崩溃
其次,try catch是拦截throw抛出的异常的,并不能捕获崩溃;
#include <iostream> #include<map> //使用改代码,测试多加几个元素到map,无论你删除中间的某一个,还是首尾,只要是循环再++,就会崩溃 int main() { bool flag; std::map<std::string, std::string>m_DevMap; m_DevMap.insert(std::pair<std::string, std::string>("1", "one")); std::map<std::string, std::string>::iterator itor = m_DevMap.begin(); std::string deviport = "1"; try { for (; itor != m_DevMap.end(); itor++) { std::cout << "dele----111"; if (strcmp(deviport.c_str(), itor->first.c_str()) == 0) { if (itor->second != "") { std::cout << "dele----222"; } m_DevMap.erase(itor); flag = true; } } } catch (...) { std::cout << "dele----333"; } return flag; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
2023-03-22 ZLmediakit媒体服务器测试
2014-03-22 一年多后开通博客了