首页 > 编程语言 >C++基于范围的for循环优劣

C++基于范围的for循环优劣

时间:2024-05-01 16:33:48浏览次数:21  
标签:QPair 优劣 C++ record 循环 移除 messageBlockRecord

  C++ 的范围基 for 循环是对这些更传统循环方式的一种抽象,使得代码更简洁,更容易阅读和维护,同时减少了出错的机会,特别是在涉及复杂数据结构时。如我某个工程中的一个代码段:

QDateTime time = QDateTime::currentDateTime();
for (const QPair<QString, QDateTime> &record : messageBlockRecord) {
    if (record.first == message.at(i).uuid) {
        //信号间隔时间超时,移除记录,break退出当前循环,并执行添加告警信息栏操作
        if (time.secsTo(record.second) > 120) {
            // 移除当前QPair
            
            break;
        }
        //信号间隔时间未超时,不添加新窗,退出循环
        else {
            continue;
        }
    }
}
               

   该代码段读取了容器 messageBlockRecord 中所有的 QPair ,并循环比对 QPair 的第一个参数是否等于 message.at(i).uuid ,这没有问题。但是当我们需要修改 messageBlockRecord 中的内容时,这种循环不是一个好办法。以下是参考文献:

  直接在基于范围的 for 循环中修改容器(如删除元素)是不安全的,因为这可能会导致迭代器失效,从而引发运行时错误。因此,要移除 QList 中的元素,最好使用传统的 for 循环或者其他方法来安全地迭代和修改列表。

  我们在使用基于范围的for循环时会添加 const 和 & 构成常量引用,目的就是避免在循环中对容器中的元素进行修改,其原因或许也是如上所言。

标签:QPair,优劣,C++,record,循环,移除,messageBlockRecord
From: https://www.cnblogs.com/hw-blog/p/18169441

相关文章

  • 双向链表及双向循环链表接口设计
    双向链表及双向循环链表接口设计双向链表接口设计由于带头结点更加方便用户进行数据访问,所以本次创建一条带头结点的双向不循环的链表。创建新的头结点和新节点//数据类型typedefintdatatype_t;//创建结点类型typedefstructdoublelinckelist{datatype_tdata;......
  • 双向链表及双向循环链表接口设计
    双向链表及双向循环链表接口设计双向链表接口设计由于带头结点更加方便用户进行数据访问,所以本次创建一条带头结点的双向不循环的链表。创建新的头结点和新节点``//数据类型`typedefintdatatype_t;//创建结点类型typedefstructdoublelinckelist{datatype_tdata;//......
  • SpringBoot 循环引用解决办法
    Spring原生是允许并解决了单层循环引用的,但从SpringBoot2.6.0开始,默认禁止Bean之间的循环引用,如果存在循环引用就会启动失败报错。此时要解决循环引用问题有两个办法:设置Spring允许循环引用(推荐)。spring:main:allow-circular-references:true在循环引用......
  • 使用 Visual C++ 的 Office 自动化
    摘要本文解答了有关从VisualC++自动化到MicrosoftOffice的常见问题。更多信息目录什么是自动化?我不熟悉自动化,在哪里可以找到要了解详细信息的好资源?是否有其他方法可以使用自动化?什么是COM? 如何实现附加到正在运行的Office应用程序实例?如何实现传......
  • C++重写
    数组DiscoveredTileIndexed和DiscoveredTileSortingCosts这两个数组是用来存储遍历的方格的,DiscoveredTileSortingCosts存储的是每个方格的消耗,DiscoveredTileIndexed存储的是每个方格的位置即(x,y)。DiscoveredTileSortingCosts中的消耗和DiscoveredTileIndexed位置是一一对......
  • C++指针与引用(Pointers OR References)
    一、PointersPointer是指针,可以用来指向任何一个objects,包括一般变量:1inti=3;2int*pi=&i;3cout<<pi<<endl;//0x0064FDF04cout<<*pi<<endl;//3此时pi本身内含i的地址,要取出pi所指向的object,可以使用*运算符(dereferenceoperator).Pointer......
  • Spring6 当中的 Bean 循环依赖的详细处理方案+源码解析
    1.Spring6当中的Bean循环依赖的详细处理方案+源码解析@目录1.Spring6当中的Bean循环依赖的详细处理方案+源码解析每博一文案1.1Bean的循环依赖1.2singletion下的set注入下的Bean的循环依赖1.3prototype下的set注入下的Bean的循环依赖1.4singleton下的构造注......
  • C/C++如何写调试宏
    1.调试宏以及测试在写代码时,不可避免需要打印提示、警告、错误等信息,且要灵活控制打印信息的级别。另外,还有可能需要使用宏来控制代码段(主要是调试代码段)是否执行。为此,本文提供一种调试宏定义方案,包括打印字符串信息LOG1宏和格式化打印LOG2宏,且能通过宏控制代码段执行。完整代......
  • 《Effective C++》第三版-3. 资源管理(Resource Management)
    目录条款13:以对象管理资源(Useobjectstomanageresources)关键想法智能指针条款14:在资源管理类中小心copying行为(Thinkcarefullyaboutcopyingbehaviorinresource-managingclasses)条款15:在资源管理类中替工对原始资源的访问(Provideaccesstorawresourcesinresource-ma......
  • 学习 C++,从搭建 Visual Studio Code 开始
    0.声明本文针对Windows和Linux系统配置VisualStudioCode,Mac贵族请勿入内。本文以Windows10系统演示。1.准备工作1.1.安装VisualStudioCodeWindows:官网下载链接选择Windows(Windows10,11)进行安装Linux:在应用商店搜索VisualStudioCode,安装即......