为什么使用QVector(Qt)而不是std :: vector

我对C ++和Qt非常陌生,但我非常擅长C#/ Java。

关键是我喜欢跨平台,但是我和Qt混淆了。 不是std::vector已经是跨平台的,不是提供了一个相当于非跨平台的东西吗?

另外, FileQFile不同?

链接会很好,谢谢:)

这篇文章很好。 它将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问题对我来说很重要。