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

时间:2011-04-11 14:57:27

标签: c++ qt vector

我是C ++和Qt的新手,但我非常擅长C#/ Java。

关键是我喜欢跨平台,但我对Qt感到困惑。是不是std::vector已经跨平台,Qt是否提供了与非跨平台事物相当的东西?

FileQFile有何不同?

链接会很好,谢谢:)

6 个答案:

答案 0 :(得分:42)

这篇文章很好。它将Qt模板库与标准模板库进行比较:

希望,您会发现文章中列出的所有差异很有趣。

编辑:

以下是我感兴趣的内容:

  

我认为最大   QTL的优势在于它具有   相同的实施(包括   所有操作系统上的二进制兼容性   Qt支持。一些STL   实施可能低于标准   谈到表演或他们   可能缺少功能。一些   平台甚至没有STL!上   另一方面,STL更多   可定制的,并在其中提供   整个头文件... 就像我说的,   没有明确的赢家

像他说的那样,没有明确的赢家。但仍然阅读这篇文章会让很多事情变得清晰。在不知道另一个的情况下,更好地了解其中的差异。

答案 1 :(得分:13)

QVector类是引用计数,适合在不复制的情况下共享。 Qt提供了许多与STL容器相对应的容器。一个描述这些内容的文档,内容有一些解释和一些基本原理:

答案 2 :(得分:9)

来自over here

  

Qt起源于C ++和   标准库不是   标准化或得到良好支持   编译器。因此它重复了一个   很多东西现在都在   标准库,如容器   和类型信息。最   显然,他们修改了C ++   语言提供信号,这样   Qt类不能轻易使用   非Qt课程。

答案 3 :(得分:1)

C ++的std::vector是跨平台的,因为它是C ++标准的一部分。每个符合C ++标准的编译器都必须提供它。

我不熟悉Qt,但我确实看到了in the docs

  

注意:此课程中的所有功能都是   折返。

也可能(推测)QVector类更容易集成以容纳以std::vector为中心的以Qt为中心的对象。再一次,我不熟悉Qt所以你必须自己决定。

根据经验(有许多例外情况),我倾向于使用std::vector,除非我有一个令人信服的理由使用某些特定于库的容器类。

答案 4 :(得分:1)

我与QTL的不良体验与QTL没有提出任何例外有关;这使得跟踪和修复关键错误变得更加困难。此外,STL实现与编译器密切相关,因为库的某些部分需要特定于编译器的语言扩展。这意味着STL实施通常可以胜过QTL,这需要是可移植的,因此无法从所述扩展中受益。调试问题对我来说至关重要。

答案 5 :(得分:1)

由于没有答案,Qt容器(包括QVector)通常具有更完整的API,与std::vector相比,它确实提供了一定程度的额外便利并减少了冗长性。

QVector并未真正集成到Qt API中,该角色是由不合适的QList承担的,因此,使用QVector以获得更好的整体兼容性并不是一个很强的论点Qt API。请注意,随着QList的缺点越来越为人们所认识,这对于Qt 6可能会有所改变。

话虽如此,如果您已经在应用程序上依靠Qt了,那么为方便起见,使用QVector是很有意义的。我假设没有人会为一个或两个容器添加像Qt这样a肿的依赖项。 QVector是高效且稳定的执行者,它将在Qt支持的任何平台上正常运行。

另一方面,如果您想创建一个与框架无关的核心逻辑API,则最好在标准C ++中进行开发,这样您就可以获得与特定项目无关的可移植性GUI框架,因此您将来可以根据需要轻松地将其迁移到其他框架。