【发布时间】:2022-12-14 06:38:40
【问题描述】:
我正在做一个 Qt c++ 项目,我使用过 Qt STL 容器,比如 QVector、QList、
但是使用 <QtAlgoritm> 的方法比 STL c++ <algorithm> 的方法少。
我现在使用 QtContainers 和 QtIteraters 以及 standerd STL <algorithm>'s。这是正确的方法吗?
【问题讨论】:
我正在做一个 Qt c++ 项目,我使用过 Qt STL 容器,比如 QVector、QList、
但是使用 <QtAlgoritm> 的方法比 STL c++ <algorithm> 的方法少。
我现在使用 QtContainers 和 QtIteraters 以及 standerd STL <algorithm>'s。这是正确的方法吗?
【问题讨论】:
是的,这很好而且是故意的。 QtAlgorithms 不会尝试复制 STL 算法库中已有的内容,并且在最新的 Qt 版本中已弃用许多重复的内容(请参阅https://doc.qt.io/qt-5/qtalgorithms-obsolete.html)。但要注意使用算法时 Qt 容器不必要分离的问题。在算法中使用它之前,最好使用 const 迭代器或将容器转换为 const 引用,以避免不必要的分离(即深层复制)或尽可能使用 std::as_const 或 qAsConst。这同样适用于 C++11 中的范围for循环。使用像 Clazy 这样的静态分析器来指示此类潜在问题。
顺便提一句。这个视频绝对值得一看https://www.youtube.com/watch?v=uZ68dX1-sVc
这是另一个你可能会发现有用的库https://github.com/KDAB/kdalgorithms
【讨论】: