qt c++11 range-based for,foreach,for each。qt推荐使用 range-based for

news/2024/10/30 21:30:55/

标题Qt 中的遍历语法

在 C++ 中,遍历容器是常见的编程需求。而在 Qt 中,我们通常会使用 foreach 宏来遍历容器,例如:

QList<int> list = { 1, 2, 3 };
foreach (int value, list) {// 对容器中的元素进行处理操作
}

上面的代码中,我们定义了一个 QList 容器,并使用 foreach 宏来对其进行遍历,遍历过程中将每个元素的值赋值给 value 变量,然后对其进行处理操作。

然而,从 Qt 5.7 版本开始,官方就不再推荐使用 foreach 宏了。它将在 Qt 的未来版本中删除。这是因为 foreach 宏存在一些潜在的问题,不能嵌套适用,会增加复制容器的副本的开销等。此外,C++11 标准已经引入了 range-based for 循环语法,可以更方便地遍历容器并提高代码可读性。

那么,C++11 中的 range-based for 循环语法和 foreach 宏有什么区别呢?在 Qt 中应该如何选择合适的遍历语法呢?

C++11 Range-Based For 循环语法

C++11 引入了 range-based for 循环语法,用于遍历容器中的元素。它的语法形式为:

for (declaration : range) {statement
}

其中,declaration 表示遍历过程中定义的变量类型和名称,range 表示需要遍历的容器对象,statement 表示在每次循环迭代时执行的语句。

使用 C++11 Range-Based For 循环语法,上面的 QList 示例代码可以改写为:

QList<int> list = { 1, 2, 3 };
for (int value : list) {// 对容器中的元素进行处理操作
}

从上面的代码可以看出,C++11 Range-Based For 循环语法更加简洁明了,避免了手动处理迭代器的麻烦,并且会自动对容器进行遍历,提高了代码的可读性和编程效率。

C++/CLI for each 语法

除了 C++ 中的 foreach 宏和 C++11 的 Range-Based For 循环语法之外,C++/CLI 中也提供了 for each 语法来遍历 .NET Framework 中的集合容器和数组。它的语法形式为:

for each (element in container) {statement
}

其中,element 表示容器中的元素对象,container 表示需要遍历的集合对象,statement 表示在每次循环迭代时执行的语句。

Qt 推荐使用的遍历语法

在现代 C++ 中,Range-Based For 循环语法已经成为了遍历容器的首选方式,其语法简单明了,代码可读性高,并且能够兼容大部分的编译器和库。
因此,在 Qt 项目中,建议使用 C++11 的 Range-Based For 循环语法来遍历容器,而将 foreach 宏作为历史遗留代码进行处理和逐步替换。

值得注意的是,虽然 foreach 宏已经不再被推荐使用,但在特定的情况下,仍可能需要根据具体需求选择合适的语法形式,以达到最佳的编程效果。在使用时,需要结合实际情况和项目需求进行选择。

总之,在 Qt 项目中,应优先使用 C++11 的 Range-Based For 循环语法来遍历容器,以避免 foreach 宏可能存在的问题,并提高代码可读性和编程效率。

注意

不推荐在range-for的循环体中改变遍历的容器的大小,即不允许遍历的同时添加或删除元素,如果想要这么做,最好使用for i循环


http://www.ppmy.cn/news/60366.html

相关文章

FRRouting软件曝出三个新的BGP消息解析漏洞

导语&#xff1a;研究人员在流行的互联网路由协议软件中发现了多个新的BGP漏洞。 Forescout Vedere Labs在其新的漏洞研究报告中讨论了边界网关协议&#xff08;BGP&#xff09;安全一个经常被忽视的问题&#xff1a;软件实现方面的漏洞。更具体地说&#xff0c;流行的FRRoutin…

清洁赛道新势力,米博凭“减法”突围?

在五四青年节这个特殊的日子&#xff0c;方太旗下的高端智能清洁品牌“米博”发布了新一代无滚布洗地机7系列。 5月4日晚&#xff0c;米博以“减法生活&#xff0c;净请7代”为主题&#xff0c;举办了新品发布会。在发布会上&#xff0c;从小红书翻红的董洁作为方太集团米博产…

1695_week2_算法与函数(MIT使用Python编程学习手记)

全部学习汇总&#xff1a; GreyZhang/python_basic: My learning notes about python. (github.com) 首先说明一下&#xff0c;这部分信息的整理只是我个人的理解。由于自己的知识功底以及英语水准&#xff0c;很可能会有大量的疏漏。再此&#xff0c;我只想把自己学习时候的一…

从零实现深度学习框架——常见学习率调整策略原理与实现

引言 本着“凡我不能创造的&#xff0c;我就不能理解”的思想&#xff0c;本系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架&#xff0c;该框架类似PyTorch能实现自动求导。 &#x1f4a1;系列文章完整目录&#xff1a; &#x1f449;点此&#x1f448; 要深入理解…

动态gif图片如何在线做?轻松实现图片在线生成gif

常见的jpg、png格式的静态图片想要变成gif格式的动态图片时&#xff0c;要怎么办呢&#xff1f;有没有什么简单实用的gif制作工具呢&#xff1f; 一、什么工具能够在线制作gif&#xff1f; GIF中文网作为一款专业的gif制作&#xff08;https://www.gif.cn/&#xff09;工具&a…

Snmputil和Snmputilg工具的下载和基本使用 SNMP协议 Windows系统SNMP服务的安装教程

⬜⬜⬜ ---&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; (*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;---⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &#x1f381;欢迎各位→…

某程序员哀叹:二本计算机,4年开发,年包才40多万。二本真的不如985/211吗?

前段时间&#xff0c;某职场论坛上有人发了一个帖子&#xff0c;发帖人问&#xff1a;为什么大家工资那么高&#xff0c;三五年都六七十万了&#xff1f;我二本计算机专业&#xff0c;四年前端开发&#xff0c;找个年包40万多点就顶头了。 原贴如下&#xff1a; 有网友表示楼主…

第四章 数据关联分析方法

基本概念和方法 关联规则和算法应用 基本概念和术语 关联规则算法应用&#xff1a; 一个关联规则分析的例子—————超市购物篮分析 不要看 后面数字看不懂 项集&#xff1a;是指项的集合。包含k个项的项集称为k-项集 支持度&#xff1a;若A是一个项集&#xff0c;则A的…