经常在网上看到“容器中删除的只要不是最后一个元素,循环就会崩溃”
其实不然,经过测试;容器中使用迭代器循环访问,只要删除迭代器所指元素后,继续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; }
标签:std,所指,删除,DevMap,itor,崩溃,迭代 From: https://www.cnblogs.com/8335IT/p/18090272