QByteArray
保存單獨的字節,並且如果我們製作QList
的unsigned chars
也將保存單個字節。QByteArray和QList <unsigned char>或QVector <unsigned char>有什麼區別?
QByteArray
是什麼原因存在時可以做QList<unsigned char>
?
QByteArray
和QList<unsigned char>
或QVector<unsigned char>
有什麼區別?
我錯過了什麼?
QByteArray
保存單獨的字節,並且如果我們製作QList
的unsigned chars
也將保存單個字節。QByteArray和QList <unsigned char>或QVector <unsigned char>有什麼區別?
QByteArray
是什麼原因存在時可以做QList<unsigned char>
?
QByteArray
和QList<unsigned char>
或QVector<unsigned char>
有什麼區別?
我錯過了什麼?
QByteArray
是圍繞char*
的有用包裝。適合與QDataStream
串流操作和其他數據管理。 從文檔,你還可以發現:
在幕後,它總是確保數據後跟一個 「\ 0」終止,並使用隱式共享(寫入時複製)以減少 內存使用情況並避免不必要的數據複製。
QList
,起先是不是在內存中的線性(後續)(你應該使用QVector
),並沒有這樣的有用的API
QList
QList
在堆上分配內存並且不保證任何數據局部性,因此在使用QList
和QByteArray
之間可能存在性能差異。
來源:http://doc.qt.io/qt-5/qlist.html#details
QVector應該是默認的首選。 QVector通常會比QList提供更好的性能,因爲QVector總是將其項目按順序存儲在內存中,其中QList將在堆上分配它的項目,除非sizeof(T)< = sizeof(void *)並且T被聲明爲Q_MOVABLE_TYPE或使用Q_DECLARE_TYPEINFO的Q_PRIMITIVE_TYPE。請參閱使用QList的優點和缺點以獲得解釋。
QByteArray
還提供了處理字節(以及一般字符串)的便利方法。
'不能保證任何數據的局部性'請參考qt的文檔解釋這一點。謝謝。 –
'QVector應該是您的默認首選。 QVector
謝謝,在這種情況下是否表示'QVector
「的QByteArray」是專門對字符串操作「的QList」不是(替換,從數字,左/中/右)。所以它就像說「爲什麼有'std :: string'當我們可以使用'std :: vector '' –
Zaiborg
@Zaiborg你能列出一些主要的區別嗎? –