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