2016-03-21 651 views
0

QByteArray保存單獨的字節,並且如果我們製作QListunsigned chars也將保存單個字節。QByteArray和QList <unsigned char>或QVector <unsigned char>有什麼區別?

QByteArray是什麼原因存在時可以做QList<unsigned char>
QByteArrayQList<unsigned char>QVector<unsigned char>有什麼區別?

我錯過了什麼?

+0

「的QByteArray」是專門對字符串操作「的QList 」不是(替換,從數字,左/中/右)。所以它就像說「爲什麼有'std :: string'當我們可以使用'std :: vector '' – Zaiborg

+0

@Zaiborg你能列出一些主要的區別嗎? –

回答

2

QByteArray是圍繞char*的有用包裝。適合與QDataStream串流操作和其他數據管理。 從文檔,你還可以發現:

在幕後,它總是確保數據後跟一個 「\ 0」終止,並使用隱式共享(寫入時複製)以減少 內存使用情況並避免不必要的數據複製。

QList,起先是不是在內存中的線性(後續)(你應該使用QVector),並沒有這樣的有用的API

+0

這是否也適用於QVector? –

+1

@TheIndependentAquarius是的,列表和矢量之間唯一的主要區別是存儲器的存儲 – Jeka

+0

感謝您的時間。 –

1

QListQList在堆上分配內存並且不保證任何數據局部性,因此在使用QListQByteArray之間可能存在性能差異。

來源: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還提供了處理字節(以及一般字符串)的便利方法。

+0

'不能保證任何數據的局部性'請參考qt的文檔解釋這一點。謝謝。 –

+1

'QVector應該是您的默認首選。 QVector 通常會比QList 提供更好的性能,因爲QVector 總是將其項存儲在內存中,其中QList 將在堆上分配其項目,除非sizeof(T)<= sizeof(void *)且T已聲明爲可以是使用Q_DECLARE_TYPEINFO的Q_MOVABLE_TYPE或Q_PRIMITIVE_TYPE。請參閱使用QList的優點和缺點進行解釋。「 - [QList](http://doc.qt.io/qt-5/qlist.html) –

+0

謝謝,在這種情況下是否表示'QVector '會和'QByteArray'一樣嗎? –

相關問題