提要

QList删除元素的时候需要特别注意一点,将元素删除后链表中元素的排列。删除一个元素后,后面的元素会补到被删元素的位置,这样在for循环中若删除元素后继续执行下标++,则会少遍历元素。下面看一个示例。

示例

下面是出错的代码,删除元素后执行了下标++。

//参数大概说明,仅说明,不涉及定义
QListReso    m_listResolution;//保存每块屏的分辨率
stuBigScreen m_stuBigScrInfo;//保存大屏列表的信息
//每块屏的分辨率
typedef struct resolutions{int     row;//行数int     col;//列数int     width;//分辨率的宽int     height;//分辨率的高
}ST_RESOLU;typedef QList<ST_RESOLU> QListReso;
typedef ST_RESOLU  stuReso;//大屏列表信息
typedef struct bigScreInfo{int         bigScreRow;//大屏的行数int         bigScreCol;//大屏的列数QString     strName;//大屏名称QListReso   resoluList;//大屏列表中每块屏的分辨率
}ST_BIGSCR_INFO;typedef ST_BIGSCR_INFO stuBigScreen;
//以上仅为变量类型说明,提供以便理解下面代码void largeScreenListWidget::deleteDontExist()
{for(int i = 0; i < m_listResolution.size(); ++i){if(m_listResolution[i].row >= m_stuBigScrInfo.bigScreRow ||m_listResolution[i].col >= m_stuBigScrInfo.bigScreCol){m_listResolution.removeAt(i);}}
}

使用下标删除部分元素后,发现链表中还有部分满足删除条件的元素没有被删除,原因是在被删除元素后面的元素,会补上前面被删除元素的位置。此时再执行下标++,会跳过一个元素,故而当删除元素后,不能执行下标++,而要再在原来的被删除的元素的位置上再去判断一下是否满足删除条件。
正确的代码如下:

void largeScreenListWidget::deleteDontExist()
{for(int i = 0; i < m_listResolution.size(); ++i){if(m_listResolution[i].row >= m_stuBigScrInfo.bigScreRow ||m_listResolution[i].col >= m_stuBigScrInfo.bigScreCol){m_listResolution.removeAt(i);i--;}}
}

相比前面的代码,此段代码的实现中多了下标–,为了将删除元素后紧跟着补到被删除元素的位置上的元素也进行判断,这样所有的元素都会判断看是否满足删除条件。

qt中QList使用removeAt()删除元素相关推荐

  1. Qt中QList用法详解

    QList 列表指针的 释放 1,使用qDeleteAll() QList<T*> list: qDeleteAll(list): list = NULL; QList<T*> ...

  2. STL中map/vector的删除元素操作

    在我们使用C++中的STL的时候,可以使用迭代器iterator进行遍历,但是当我们通过iterator对vector和map删除元素的时候,要格外的小心,往往操作不当,导致iterator失效,后果 ...

  3. 集合中的遍历以及删除元素

    package collection;import java.util.ArrayList; import java.util.Collection; import java.util.Iterato ...

  4. QT中QTableWidget清空或删除内容功能

    今天使用到了QT中QTableWidget的清空和删除功能,特地整理出. 参考https://blog.csdn.net/qq_16093323/article/details/79226349 如下 ...

  5. JS中字符串和数组删除元素方法

    1.字符串删除元素方法 按下标删除 可以使用提供的库函数slice(). substring() .substr() 进行截取,实质是提取然后赋给原字符串str 按值删除 主要用replace()替换 ...

  6. python list删除元素_python中List添加、删除元素的几种方法

    原博文 2015-06-21 18:51 − 一.python中List添加元素的几种方法 List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非 ...

  7. js中数组插入、删除元素操作

    /** 删除数组元素:Array.removeArr(index)*/Array.prototype.removeArr = function (index) {if (isNaN(index) || ...

  8. ListT用RemoveAt删除元素

    在用RemoveAt遍历list泛型集合移除数据的时候,不要用foreach遍历,要用for遍历: for (int i = 0; i < ltype.Count; i++){if (ltype ...

  9. php 从数组里删除元素,PHP从数组中删除元素的四种方法实例

    PHP从数组中删除元素的四种方法实例 一.总结 一句话总结:unset(),array_splice(),array_diff(),array_diff_key() 二.PHP从数组中删除元素的四种方 ...

最新文章

  1. OpenCV4.4 CUDA编译与加速全解析
  2. elasticsearch 条件去重_elasticsearch去重计数
  3. freemarker变量自加
  4. SAP 电商云 Spartacus UI 和路由相关的 State 处理
  5. 密钥分离,.Net程序猿不再背锅
  6. 5个编码技巧以减少GC开销
  7. 工作几天被裁员,难受
  8. 完全自主可控的安全关键领域仿真测试软件SkyEye可替代SCADE
  9. 想被千年后的人知道吗,快去GitHub上传代码吧!
  10. 外星人电脑为什么那么贵_为什么百丽的鞋那么贵
  11. AcWing 1750. 救生员(差分+暴力枚举)
  12. JDK1.7 jdk7安装和环境变量配置(Windows环境)
  13. 报刊资料整理:云安全(cloud security)
  14. 朴素贝叶斯之邮件分类
  15. 电脑上如何图片文字识别?哪个工具识别的准确?
  16. 基于python、百度ocr、multiprocessing多进程、selenium网页自动化 、pyqt5界面弹出,实现发票的识别与对学校财务网站的脚本自动化上传操作的项目总结
  17. Host是什么?如何设置host文件?
  18. 移动、联通、电信APN
  19. Snapchat面试题:移除K位
  20. (转)用遗传算法优化BP神经网络的Matlab编程实例

热门文章

  1. 微服务应用实现无损上下线实践
  2. 当云原生遇到混合云:如何实现“求变”与“求稳”的平衡
  3. 3 张图带你走近蚂蚁mPaaS音视频通话组件
  4. Redis 混合存储最佳实践指南
  5. 开发函数计算的正确姿势——tensorflow serving
  6. 2018最佳GAN论文回顾(下)
  7. “视网膜”重装来袭 AI技术为视频业务场景赋能
  8. Web 前端自学很苦?来,手把手教你,拿下前端!
  9. 灰度测试试验流量“洗牌”
  10. 为什么我学了6个月Python,还是找不到工作?