qlist的遍历,如何从QList中删除元素,同时使用foreach迭代它?

2023-11-10

I'm new to Qt and trying to learn the idioms.

Qt automatically takes a copy of the container when it enters a foreach loop. If you modify the container as you are iterating, that won't affect the loop.

But it doesn't say how to remove an element while iterating with foreach. My best guess is something like:

int idx = 0;

foreach (const Foo &foo, fooList) {

if (bad(foo)) {

fooList.removeAt(idx);

}

++idx;

}

Seems ugly to have to scope idx outside the loop (and to have to maintain a separate loop counter at all).

Also, I know that foreach makes a copy of the QList, which is cheap, but what happens once I remove an element -- is that still cheap or is there an expensive copy-on-modify going on? Yes, deep copy happens.

EDIT : This doesn't seem like idiomatic Qt either.

for (int idx = 0; idx < fooList.size(); ) {

const Foo &foo = fooList[idx];

if (bad(foo)) {

fooList.removeAt(idx);

}

else ++idx;

}

解决方案

You should better use iterators for that:

// Remove all odd numbers from a QList

QMutableListIterator i(list);

while (i.hasNext()) {

if (i.next() % 2 != 0)

i.remove();

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qlist的遍历,如何从QList中删除元素,同时使用foreach迭代它? 的相关文章

  • np.argmax()

    np argmax 表示返回索引最大值 需要区分索引和元素值 先说结论 三维张量时 将张量看成正方体 axis 0时表示沿高度轴 深度方向 各元素最大值 返回结果形状与正方体顶面相同 axis 1时表示沿宽度轴 矩阵行方向 各元素最大值 返
  • mysql怎么在一段时间区间内按照周分组,把属于一周的数据汇总在一起以及如何自定义周?

    小编在写需求的时候发现有一个需求是给出一个开始 起止时间 需要你把每一周的数据汇总然后展现出来 比如给了前四周的日期 需要你自动汇总第一周到第四周的数据 奇葩的来了 正常来说周一到周日为一周 或者周日到周六为一周 但是产品需要周六到周五算一
  • IDEA(2021) 创建Java Web项目

    IDEA 2021 创建Java Web项目 开发工具与关键技术 IDEA 2021 配置Tomcat 字符编码UTF 8 和热加载 作者 刘铭聪 撰写时间 2021年4月29日 1 IDEA 2021 创建Java Web项目 1 1 创
  • SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系

    SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系 1 SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系 1 SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系 https www swrj
  • Ubuntu 20.04安装LAMP,并配置sqli-labs靶场

    Ubuntu 20 04安装LAMP 并配置sqli labs靶场 一 安装lamp 安装apache2 安装php 安装mysql 安装libapache2 mod php 安装php mysql 确认安装成功 确认apache2安装成功
  • webpack serve 正常启动但没效果

    安装 webpack dev server npm i webpack dev server d 都是最新版本 配置webpack config js const path require path 导入 node js 中专门操作路径的模
  • 阿里云E-HPC+i4p大内存实例,加速寻因生物单细胞数据分析效率

    寻因生物是一家专注于单细胞技术的生物科技企业 拥有自主研发的微孔芯片与油包水双技术单细胞捕获平台 致力于通过国产高通量单细胞全链条产品及服务 将单细胞技术普适化应用于临床及药物研发 助力相关疾病研究 单细胞测序技术呼唤更高计算性能 自单细胞
  • 时序预测

    时序预测 MATLAB实现BiLSTM时间序列预测 目录 时序预测 MATLAB实现BiLSTM时间序列预测 BiLSTM介绍 BiLSTM实现 单层BiLSTM设计 多层BiLSTM设计 BiLSTM程序 设计案例1 设计案例2 参考资料
  • 【Vue2】事件处理(点击、按键)

    事件处理 js中button按钮点击触发函数写法
  • 贪心算法——最小生成树

    设G V E 是无向连通带权图 即一个网络 E中的每一条边 v w 的权为c v w 如果G的子图G 是一棵包含G的所有顶点的树 则称G 为G的生成树 生成树上各边权的总和称为生成树的耗费 在G的所有生成树中 耗费最小的生成树称为G的最小生
  • 【论文笔记_知识蒸馏_2021】KNOWLEDGE DISTILLATION VIA SOFTMAX REGRESSION

    代码地址 https github com jingyang2017 KD SRRL 摘要 本文通过知识提炼解决了模型压缩的问题 我们主张采用一种优化学生网络倒数第二层的输出特征的方法 因此与表征学习直接相关 为此 我们首先提出了一种直接的
  • vue使用element el-table实现动态表头数据表、并滚动展示列表

    vue使用el table 实现动态数据表 并滚动展示 tableLabel表头数据 支持条数 宽度设置 tableData存放所有数据 showList存放用于展示的数据 使用setInterval定时更新showList 删除第一条 末
  • R语言使用长短期记忆网络(LSTM)进行时间序列分析

    目录 引言 数据准备 数据预处理 创建训练数据和标签 构建LSTM模型 训练模型
  • Maven 多项目依赖版本管理(Maven Multi Project version management)

    博主工作负责的微服务已经达到了十几个 每个微服务相互直接都是独立的 有独立的project 于是maven的依赖管理就很头疼了 每一个项目都需要添加自己的版本 还要互相比对 每次升级一些第三方依赖需要修改所有文件 于是产生了自己写paren
  • 换脸-DeepFakeLab-SimSwap对比

    DeepFakeLab 主流的换脸模型DeepFakeLab只能实现一对一的换脸 用source数据集和target数据集对模型进行训练 训练后的模型只能将source的脸换到target上面去 其主要训练流程如下 训练一个encoder
  • 【ROS】TF2坐标转换及实战示例

    Halo 这里是Ppeua 平时主要更新C 数据结构算法 感兴趣就关注我吧 你定不会失望 文章目录 0 ROS中的坐标转换消息包 0 1 geometry msgs TransformStamped 0 2 geometry msgs Po
  • 【ZYNQ-GPIO MIO】Xilinx 知识点笔记(GPIO篇、MIO)

    1 GPIO是一个外设 用来对器件的引脚作观测 input 以及控制 output 2 MIO Multiuse I O 将来自PS外设和静态存储器接口的访问多路复用到PS的引脚上 3 GPIO可以独立且动态地编程 作为输入 输出以及中断模
  • 【数据结构】链表的实现以及应用

    目录 1 链表 1 1概念及结构 1 2链表的实现 1 2 1接口 1 2 2创建链表 1 2 3创建新的节点 1 2 4头插 1 2 5尾插 1 2 6头删 1 2 7尾删 1 2 8查询 1 2 9在pos指针之前插入数据 1 2 10
  • rosdep找不到依赖:Cannot locate rosdep definition for [yocs_cmd_vel_mux]

    本着缺少什么安装什么的原则 你可能尝试了 sudo apt get install yocs cmd vel mux 发现无法locate package 是因为名称不对 依赖包的名称有两个部分组成 1 ros kinetic ROS版本

随机推荐