小编典典

STL 或 Qt 容器?

all

QMap使用 Qt 容器( ,QVector等)而不是 STL 等价物有什么优缺点?

我可以看到更喜欢 Qt 的一个原因:

  • Qt 容器可以传递到 Qt 的其他部分。例如,它们可用于填充 a QVariant,然后是 a QSettings(尽管有一些限制,只接受QListQMap/QHash其键是字符串)。

还有其他的吗?

编辑 :假设应用程序已经依赖于 Qt。


阅读 120

收藏
2022-07-12

共1个答案

小编典典

我开始专门使用std::(w)stringSTL 容器并转换为/从 Qt 等效项,但我已经切换到QString并且我发现我越来越多地使用 Qt
的容器。

与字符串QString相比,它提供了更完整的功能,std::basic_string并且完全支持 Unicode。它还提供了一个高效的 COW
实现
,我非常依赖它。

Qt的容器:

  • 提供与 中相同的 COW 实现,这在使用 Qt 的宏(执行复制)以及使用元类型或信号和插槽QString时非常有用。foreach
  • 可以使用 STL 风格的迭代器或 Java 风格的迭代器
  • 可以流式传输QDataStream
  • 在 Qt 的 API 中被广泛使用
  • 具有跨操作系统的稳定实现。STL 实现必须遵守 C++ 标准,但可以随意做任何事情(参见std::stringCOW 争议)。一些 STL 实现尤其糟糕。
  • 提供哈希值,除非您使用 TR1,否则这些哈希值不可用

QTL 与 STL 有不同的理念,J. Blanchette
对此进行了很好的总结:“STL
的容器针对原始速度进行了优化,而 Qt 的容器类经过精心设计,可提供便利、最少的内存使用和最少的代码扩展。”
上面的链接提供了有关 QTL 实现以及使用了哪些优化的更多详细信息。

2022-07-12