在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;
}
复制代码

 

 

posted on   邗影  阅读(28)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
历史上的今天:
2023-03-22 ZLmediakit媒体服务器测试
2014-03-22 一年多后开通博客了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示