为什么使用QVector(Qt)而不是std :: vector
我对C ++和Qt非常陌生,但我非常擅长C#/ Java。
关键是我喜欢跨平台,但是我和Qt混淆了。 不是std::vector
已经是跨平台的,不是提供了一个相当于非跨平台的东西吗?
另外, File
和QFile
不同?
链接会很好,谢谢:)
这篇文章很好。 它将Qt模板库与标准模板库进行比较:
- QTL与STL
希望,你会发现看到文章中列出的所有差异有趣。
编辑:
这是我觉得有趣的地方:
我认为QTL的最大优点是在Qt支持的所有操作系统上都有相同的实现(包括二进制兼容性) 。 一些STL实现在性能方面可能低于标准,或者可能缺lessfunction。 有些平台甚至没有STL! 另一方面,STL更具可定制性,可以在头文件中完整地提供。 就像我说的,没有明确的赢家 。
就像他说的,没有明确的赢家。 但是仍然阅读这篇文章使得很多事情清楚。 不知道另一个,更好地了解差异。
QVector类是引用计数,适合于共享而不需要复制。 Qt提供了很多对应于STL容器的容器。 一个文件,描述这些内部的一些解释和一些理由:
- 在Qt 4容器里面
从这里 :
Qt起源于C ++和标准库没有标准化或编译器支持的时候。 因此它重复了很多标准库中的东西,比如容器和types信息。 最重要的是,他们修改了C ++语言来提供信号,所以Qt类不能用于非Qt类。
C ++的std::vector
是跨平台的,因为它是C ++标准的一部分。 每个符合C ++的编译器都必须提供它。
我不熟悉Qt,但是我在文档中看到了这个:
注意:这个类中的所有函数都是可重入的。
也有可能(推测)QVector类比std::vector
更容易集成以保存以Qt为中心的对象。 再一次,我不熟悉Qt,所以你必须自己决定。
作为一个经验(有很多例外),我会倾向于使用std::vector
除非我有一个令人信服的理由来使用某些库特定的容器类。
我在QTL
方面遇到的不好的经验与QTL
没有提出任何例外有关。 这使得追踪和修复严重错误变得更加困难。 而且, STL
实现与编译器密切相关,因为库的某些部分需要编译器特定的语言扩展。 这意味着一个STL
实现往往可以胜过QTL
,这个QTL
需要是可移植的,因此不能从这个扩展中受益。 但debugging问题对我来说很重要。