我对C++和Qt很陌生,但我很擅长C#/Java。
关键是我喜欢跨平台,但我对Qt感到困惑。难道 std::vector
已经支持跨平台了吗?Qt是否提供了一个非跨平台东西的等效物?
此外,File
和 QFile
有什么区别?
如果有链接就更好了,谢谢 :)
这篇文章看起来不错,它比较了Qt模板库和标准模板库:
希望您会在文章中发现所有列出的差异。
编辑:
以下是我觉得有趣的内容:
我的看法是,QTL最大的优点是,在Qt支持的所有操作系统上都具有相同的实现(包括二进制兼容性)。某些STL实现可能在性能方面不太好,或者可能缺少功能。有些平台甚至没有STL!另一方面,STL更可定制,并且在头文件中完全可用...就像他说的那样,没有明确的胜者。
就像他所说的,没有明确的胜者。但是阅读这篇文章会让很多事情变得清晰。了解差异总比在不了解另一种选择的情况下选择其中之一要好。
来自这里:
Qt最初诞生于一个时代,那时C++和标准库还没有被编译器充分支持或标准化。因此,它复制了很多现在已经存在于标准库中的东西,比如容器和类型信息。更重要的是,他们修改了C++语言,提供了信号(signals),以至于Qt类不能轻松地与非Qt类一起使用。
由于没有回答提到,Qt容器,包括QVector通常具有更完整的API,这确实提供了一定程度的额外便利性,并在与std::vector相比时减少了冗余。
QVector并没有真正集成到Qt API中,这个角色被不合适的QList所取代,因此使用QVector以获得与Qt API的整体更好兼容性并不是一个强有力的论点。需要注意的是,随着对QList的缺点越来越被认可,这种情况可能会在Qt 6中发生改变。
话虽如此,如果您已经依赖于Qt进行应用程序开发,使用QVector是非常合理的选择。我想没有人会为了一个或两个容器而添加如此庞大的Qt依赖。QVector高效且性能稳定,在任何由Qt支持的平台上都可以无问题运行。
另一方面,如果您想创建一个与框架无关的核心逻辑API,最好是使用标准C++进行开发,这样您就可以获得一个不受特定GUI框架限制的可移植代码,将来如果需要,可以轻松迁移到其他GUI框架。
Qt 6 更新:现在QList
和 QVector
在功能上几乎完全相同。void qvectortest()
{
QVector<double> s[10][100];
for (int is = 0; is < 100000; is++)
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 100; j++)
{
for (int k = 0; k < 10000; k++)
{
s[i][j].push_back(k);
}
}
};
QVector<double> d;
d=s[0][0].mid(0);
d.clear();
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 100; j++)
{
s[i][j].clear();
};
};
cout << "Qvector="<<is << endl;
}
}
并且
void vectortest()
{
vector<double> s[10][100];
for (int is = 0; is < 100000; is++)
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 100; j++)
{
for (int k = 0; k < 10000; k++)
{
s[i][j].push_back(k);
}
}
};
vector<double> d;
d.assign(s[0][0].begin(), s[0][0].end());
d.clear();
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 100; j++)
{
s[i][j].clear();
};
};
cout << "vector="<<is << endl;
}
}
C++的std::vector
是跨平台的,因为它是C++标准的一部分,每个符合C++标准的编译器都必须提供它。
我不熟悉Qt,但我在文档中看到了这个注解:
注意:该类中的所有函数都是可重入的。
很可能(推测)QVector类比std::vector
更容易集成以持有Qt-centric对象。再次说明,我对Qt不太熟悉,所以你必须自己决定。
作为一个经验法则(也有很多例外),除非有强烈的理由使用某些特定于库的容器类,否则我会倾向于使用std::vector
。
QFile
相比的File
。FILE *
则完全不同。 - rubenvbint
存储大小,因此在 x86-64 上无法存储超过 2^31 个元素。 - Fred Foo