首页 > 其他分享 >在for循环中删除迭代器所指内容崩溃

在for循环中删除迭代器所指内容崩溃

时间:2024-03-22 19:13:18浏览次数:19  
标签:std 所指 删除 DevMap itor 崩溃 迭代

经常在网上看到“容器中删除的只要不是最后一个元素,循环就会崩溃”

其实不然,经过测试;容器中使用迭代器循环访问,只要删除迭代器所指元素后,继续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

相关文章

  • python 如何删除文件夹下的所有文件和子文件夹?
    前言删除文件夹下的所有的文件,以及子文件下所有的文件,把这个文件夹全部删除。shutil.rmtree()删除先介绍一个最简单的方法,shutil.rmtree()importshutil#上海悠悠wx:283340479#blog:https://www.cnblogs.com/yoyoketang/shutil.rmtree('D:\\test',ignore_errors=Tru......
  • 在Linux中,有一堆日志文件,如何删除7天前的日志文件?
    在Linux中,如果你想要删除7天前的日志文件,你可以使用find命令配合-mtime选项来实现。下面是一个详细的步骤说明:1.确定日志文件所在的目录首先,你需要知道这些日志文件存放在哪个目录下。例如,假设你的日志文件都存放在/var/log/目录下。2.使用find命令查找并删除文件你可以使用......
  • 删除有序链表中重复的元素-1
    描述删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次例如:给出的链表\(1\to1\to2\),返回\(1\to2\)给出的链表为\(1\to1\to2\to3\to3\),返回\(1\to2\to3\)数据范围:链表长度满足\(0\len\le100\),,链表中任意节点的值满足\(\midval\mid\le1......
  • 450. 删除二叉搜索树中的节点c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*leftleave(structTreeNode*root){if(root->left){root=root->left;......
  • TypeScript之Symbol和迭代器
    Symbols介绍自ECMAScript2015起,symbol成为了一种新的原生类型,就像number和string一样。symbol类型的值是通过Symbol构造函数创建的。letsym1=Symbol();letsym2=Symbol("key");//可选的字符串keySymbols是不可改变且唯一的。letsym2=Symbol("key");let......
  • 物理删除 与 逻辑删除
    dishService.remove(queryWrapper);//根据条件删除 dishService.removeById(1);//根据id删除一个 dishService.removeById(dish); //根据id删除一个,传入实体对象!实体对象必须有id值!!! dishService.removeByIds(idList);//根据id集合......
  • vue2/3 - element表格组件el-table实现懒加载树型(上下级)数据、默认展开和隐藏层级,支
    效果图在vue2、vue3项目开发中,使用element饿了么组件库,实现Table表格组件动态懒加载表格数据,可以决定是否自动展开所有2级或3级,也可以点击加载下级数据,可搭配表格的增删改查,数据变化后自动更新列表不会破坏树状的展开和折叠结构。提供详细示例代码,一键复制运行查看效果,稍......
  • java 差异删除 差异更新与删除
    publicbooleanrelation(LongprojectId,List<BsMemberEntity>members){ //1)、获取原关联数据 List<ProProjectAuthorEntity>oldList=this.findByProjectId(projectId); List<Long>oldMemberIds=oldList.stream().map(item->{ returnitem......
  • 线性DP——伴随插入、删除操作
    编辑距离题目描述设\(A\)和\(B\)是两个字符串。我们要用最少的字符操作次数,将字符串\(A\)转换为字符串\(B\)。这里所说的字符操作共有三种:删除一个字符;插入一个字符;将一个字符改为另一个字符。\(A,B\)均只包含小写字母。输入格式第一行为字符串\(A\);第二行为......
  • 【python】(02)初识迭代器Iterator
    系列文章回顾【python】(01)初识装饰器Decorator【python】(02)初识迭代器Iterator文章目录一.迭代器的定义二.迭代器的作用三.实际代码示例四.使用注意事项五.常见问题迭代器是Python中非常重要的概念,通过灵活运用迭代器可以实现高效的数据遍历和处......