霍尼韦尔

C++之迭代器失效及解决

喜你入骨 提交于 2019-12-28 05:21:57
C++之迭代器失效及解决 描述 基于CStringList来实现数据插入删除 实现逻辑描述 代码实现 崩溃界面显示 分析 基于链表式容器List来实现数据存储 代码实现 崩溃问题描述 错误分析 网上关于错误描述: 关于迭代器失效总结 解决方案: 网络资料参考 描述 在霍尼韦尔门禁项目中,通过遍寻霍尼韦尔设备获取设备信息后,GotMessage会不断收到消息,并把消息数据添加到容器里面。在回调函数线程中,循环获取容器数组中的数据进行处理,并需要删除尾部数据。存储数据的容器的实现,需要考虑到频繁的插入和删除数据。 综合来说,CStringList和链表式容器List是最好的实现方式,但频繁的插入和删除数据,会造成迭代器失效的问题。 基于CStringList来实现数据插入删除 实现逻辑描述 采用CStringList来实现频繁的数据插入和删除操作。从头部插入数据,从尾部删除数据。 代码实现 //1、定义类变量 CStringList m_szListInput ; //2、初始化; m_szListInput . RemoveAll ( ) ; //3、CStringList从头部添加数据元素。 //(遍历所有霍尼韦尔设备后,GotMessage会不断收到消息,并把消息数据添加到CStringList变量里面) m_szListInput . AddHead ( CString (