【问题标题】:What is the difference between QByteArray and QList<unsigned char> or QVector<unsigned char>?QByteArray 和 QList<unsigned char> 或 QVector<unsigned char> 有什么区别?
【发布时间】:2016-07-07 15:40:59
【问题描述】:

QByteArray 保存单个字节,如果我们将QListunsigned chars 相匹配,那么它也将保存单个字节。

QByteArray 存在的原因是什么?当有一个QList&lt;unsigned char&gt; 时存在?
QByteArrayQList&lt;unsigned char&gt;QVector&lt;unsigned char&gt;有什么区别?

我错过了什么?

【问题讨论】:

  • 'QByteArray' 专门用于字符串操作,'QList' 不是(替换,fromNumber,左/中/右)。所以就像说“为什么有std::string当我们可以使用std::vector&lt;char&gt;
  • @Zaiborg 你能列出一些主要区别吗?

标签: qt qlist qbytearray


【解决方案1】:

QByteArraychar* 的有用包装器。适合带QDataStream的流式处理、字符串操作等数据管理。 从文档中您还可以发现:

在幕后,它始终确保数据后跟一个 '\0' 终止符,并使用隐式共享(写时复制)来减少 内存使用并避免不必要的数据复制。

QList,起初在内存中不是线性(后续)(你应该使用QVector),并且没有这样有用的API

【讨论】:

  • 这一切都适用于 QVector 吗?
  • @TheIndependentAquarius 是的,列表和向量之间唯一的主要区别是内存存储
【解决方案2】:

QList 在堆上分配内存并且不保证任何数据局部性,因此使用QListQByteArray 之间可能存在性能差异。

发件人:http://doc.qt.io/qt-5/qlist.html#details

QVector 应该是您的默认首选。 QVector 通常会比 QList 提供更好的性能,因为 QVector 总是将其项目顺序存储在内存中,其中 QList 将在堆上分配其项目,除非 sizeof(T)

QByteArray 还提供了处理字节(和一般的字符串)的便捷方法。

【讨论】:

  • does not guarantee any data locality请参考qt的文档说明。谢谢。
  • QVector should be your default first choice. QVector&lt;T&gt; will usually give better performance than QList&lt;T&gt;, because QVector&lt;T&gt; always stores its items sequentially in memory, where QList&lt;T&gt; will allocate its items on the heap unless sizeof(T) &lt;= sizeof(void*) and T has been declared to be either a Q_MOVABLE_TYPE or a Q_PRIMITIVE_TYPE using Q_DECLARE_TYPEINFO. See the Pros and Cons of Using QList for an explanation. - QList
  • 谢谢,在这种情况下是否意味着QVector &lt;unsigned char&gt; 将与QByteArray 相同?
猜你喜欢
  • 2014-05-03
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2012-03-02
  • 1970-01-01
相关资源
最近更新 更多