qt中QList使用removeAt()删除元素

提要

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--;}}
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算之基,一文带你速懂虚拟化KVM和XEN

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者 &#xff1a;Pasca来源 &#xff1a;蛋蛋团正文 &#xff1a;共2022 字预计阅读时…

gradle下载及配置

下载&#xff1a;https://gradle.org/install/#manually 参考链接&#xff1a;https://www.cnblogs.com/linkstar/p/7899191.html 配置&#xff1a; 新建系统变量&#xff1a; GRADLE_HOME D:\Program Files\gradle-5.2.1编辑path,添加全局变量&#xff1a; ;%GRADLE_HOME%\…

qt自定义含有拖动功能的窗口在点击窗口的下拉列表时窗口移动

提要 自定义的弹出窗口&#xff0c;窗口可以实现按下鼠标拖动&#xff0c;鼠标释放停止拖动&#xff0c;窗口种含有子控件&#xff0c;下拉列表&#xff0c;在点击下拉列表时窗口移动。 解决方法 因为点击下拉列表的时候&#xff0c;触发了窗口的移动事件&#xff0c;所以添…

数字化转型2.0落地的正确姿势 | 人物志

戳蓝字“CSDN云计算”关注我们哦&#xff01;人物志&#xff1a;观云、盘点、对话英雄。以云计算风云人物为核心&#xff0c;聚焦个人成长、技术创新、产业发展&#xff0c;还原真实与鲜活&#xff01;如今&#xff0c;企业数字化转型已经进入2.0时代&#xff0c;数字化转型2.0…

linux上怎么解压zip文件和tar.gz文件

解压zip文件的方法 使用命令&#xff1a; unzip xxx.zip解压tar.gz文件的方法 使用命令&#xff1a; tar -zxvf xxx.tar.gz

新华三首发数字大脑计划;微软进军物联网领域?说好的三星折叠屏发布会,就这样不开了?Google 发布小型芯片 Jacquard...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 波音首席执行官“声明安全”…

OpenGL 图像白平衡色温

目录 一.OpenGL 图像白平衡色温 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 图像白平衡色温 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenG…

Linux6、7 系列 安装、卸载mysql

Linux环境下载mysql&#xff1a; 点击链接&#xff1a; https://blog.csdn.net/weixin_40816738/article/details/90111456 一、安装环境依赖&#xff1a; yum install -y cmake make gcc gcc-c libaio ncurses ncurses-devel二、安装流程 1、软件解压2、添加系统mysql组和m…

linux下查看cmake的版本

方法 在命令行输入指令&#xff1a; cmake --version

Kafka精华问答 | Kafka的主要应用场景有哪些?​

Kafka是最初由Linkedin公司开发,具有高性能、持久化、多副本备份、横向扩展能力。今天&#xff0c;我们就看看看关于Kafka的精华问答吧。1&#xff1a;Q:什么是Kafka&#xff1f;A&#xff1a;Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写…

修改Maven本地仓库的位置 方法

一、关于Maven的配置: 用过Maven的开发人员应该知道Maven可以通过配置 conf文件夹下面的settings.xml文件来修改maven下载的包&#xff0c;默认是下在c盘的用户文件夹下的.m2中&#xff0c;日积月累.m2会越来越庞大&#xff0c;自然会影响windows的响应&#xff0c;所以一般我们…

linux下文件颜色说明

文件颜色说明 红色——压缩文件 绿色——可执行文件 蓝色——文件夹 白色——普通文件&#xff0c;像文本文件 黄色——设备文件 浅蓝色——链接文件

强推!十大顶级大数据可视化工具 | 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦&#xff01;程序员硬核评测&#xff1a;客观、高效、不说软话。无论是技术质量、性能水平&#xff0c;还是工具筛选&#xff0c;一测便知&#xff01;编译作者&#xff1a;风车云马前言Salesforce公司的一项调查显示&#xff1a;53%的员工要经常…

代码版本管理 GitLab介绍

一、前言 GitLab是利用 Ruby on Rails 一个开源的版本管理系统&#xff0c;实现一个自托管的 Git 项目仓库&#xff0c;可通过 Web 界面进行访问公开的或者私人项目。 它拥有与 Github 类似的功能&#xff0c;能够浏览源代码&#xff0c;管理缺陷和注释。可以管理团队对仓库的…

linux下查找是否安装了fcitx插件

方法 在命令行输入指令&#xff1a; dpkg -L fcitx-frontend-qt5 也可以查找是否有libfcitxplatforminputcontextplugin.so这个库文件&#xff0c;在命令行输入&#xff1a; dpkg -L fcix-frontend-qt5 | grep .so

国内首款全国产固态硬盘控制芯片发布

4月22日&#xff0c;国科微与龙芯中科战略合作签约暨国内首款全国产固态硬盘控制芯片发布仪式在北京人民大会堂举行。双方将建立长期稳定的业务合作伙伴关系&#xff0c;携手打造关键信息基础设施国产化生态。作为首个战略合作成果&#xff0c;国科微发布全新的GK2302系列芯片&…

gitlab访问错误Whoops, GitLab is taking too much time to respond

一、异常现象&#xff1a; gitlab访问错误Whoops, GitLab is taking too much time to respond 二、问题定位 问题定位8080端口被占用&#xff1a; 三、解决方案 解决方案01&#xff1a; 将占用的8080端口的进程杀死或者卸载占用8080端口的软件修改正在占用8080端口程序的…

使用gitlab初次上传代码

提要 项目开发中需要使用gitlab来管理代码&#xff0c;将自己开发的模块上传到gitlab,第一次使用这个代码管理仓库&#xff0c;记录一下。 方法 1.首先注册gitlab的账号。这个在百度上搜一下gitlab的官网&#xff0c;进去后首页就是注册及登陆页面&#xff0c;没有账号的先注…

云数据库精华问答 | 现有数据库优化到云环境有什么好处​?

云数据库可以实现按需付费、按需扩展、高可用性以及存储整合等优势。我们就看看看关于云数据库的精华问答吧。1&#xff1a;Q:什么是云数据库&#xff1f;A&#xff1a;云数据库是指被优化或部署到一个虚拟计算环境中的数据库&#xff0c;可以实现按需付费、按需扩展、高可用性…

上传更新的代码到gitlab

提要 项目开发中已经初次上传代码到gitlab上&#xff0c;那么后面在本地修改了代码之后怎么上传&#xff0c;本文作以说明。 方法 首先说明一点&#xff0c;若你本地代码要上传的代码在你之前创建的本地仓库之外&#xff0c;那么你需要将要上传的代码拷贝到本地仓库中&#…