QByteArray和QList <unsigned char =“”>或QVector <unsigned char =“”>之间有什么区别?

时间:2016-03-21 08:06:55

标签: qt qlist qbytearray

QByteArray包含单个字节,如果我们QList unsigned chars也保留单个字节。

QByteArray成为QList<unsigned char>时,QByteArray存在的原因是什么? QList<unsigned char>QVector<unsigned char>/var/www/html之间的区别是什么?

我错过了哪些要点?

2 个答案:

答案 0 :(得分:2)

QByteArraychar*的有用包装。适用于QDataStream流式传输,字符串操作和其他数据管理。 从文档中你也可以找到:

  

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

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

答案 1 :(得分:1)

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

来自:http://doc.qt.io/qt-5/qlist.html#details

  

QVector应该是您的默认首选。 QVector通常会提供比QList更好的性能,因为QVector总是将其项顺序存储在内存中,其中QList将在堆上分配其项,除非sizeof(T)&lt; = sizeof(void *)和T已被声明为使用Q_DECLARE_TYPEINFO的Q_MOVABLE_TYPE或Q_PRIMITIVE_TYPE。有关解释,请参阅使用QList的优点和缺点。

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