2016-03-21 5 views
0

QByteArray hält einzelne Bytes, und wenn wir eine QList von unsigned chars machen, die auch die einzelnen Bytes halten wird.Was ist der Unterschied zwischen QByteArray und QList <unsigned char> oder QVector <unsigned char>?

Was ist der Grund, QByteArray existiert, wenn dort eine QList<unsigned char> gemacht werden kann?
Was ist der Unterschied zwischen QByteArray und QList<unsigned char> oder QVector<unsigned char>?

Welche Punkte fehle ich?

+0

'QByteArray' auf String-Operationen spezialisiert ist, 'QList ' nicht (ersetzen, vonNummer, links/Mitte/rechts). also ist es wie "warum gibt es' std :: string "wenn wir' std :: vector '" – Zaiborg

+0

@Zaiborg verwenden könnten, könnten Sie bitte einige wichtige Unterschiede auflisten? –

Antwort

2

QByteArray ist ein nützlicher Wrapper um char*. Geeignet für Streaming mit QDataStream, String-Operationen und andere Datenverwaltung. Aus der Dokumentation können Sie auch feststellen, dass:

Hinter den Kulissen sorgt er immer, dass die Daten von einem folgen ‚\ 0‘ Terminator und verwendet impliziten Sharing (copy-on-write) zu reduzieren, Speichernutzung und vermeiden Sie unnötiges Kopieren von Daten.

QList, zunächst nicht linear ist (nachfolgende) im Speicher (Sie QVector verwenden sollten), und haben keine solche nützlichen API

+0

Gilt das alles auch für QVector? –

+1

@TheIndependentAquarius ja, der einzige große Unterschied zwischen Liste und Vektor ist ein Speicher Speicher – Jeka

+0

danke für Ihre Zeit. –

1

QList reserviert Speicher auf Heap und garantiert keine Datenlokalität, daher kann es einen Leistungsunterschied zwischen der Verwendung von QList und QByteArray geben.

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

QVector sollte Ihr Standard erste Wahl sein. QVector liefert normalerweise eine bessere Leistung als QList, da QVector seine Elemente immer sequenziell im Speicher speichert, wobei QList seine Elemente auf dem Heap allokiert, wenn die Größe (T) < = sizeof (void *) und T entweder als Q_MOVABLE_TYPE deklariert wurde oder ein Q_PRIMITIVE_TYPE mit Q_DECLARE_TYPEINFO. Eine Erläuterung finden Sie unter Vor- und Nachteile der Verwendung von QList.

QByteArray bietet auch bequeme Methoden zum Arbeiten mit Bytes (und Strings im Allgemeinen).

+0

'garantiert keine Datenlokalität' Bitte erläutern Sie dies mit Bezug auf die QT-Dokumente. Vielen Dank. –

+1

'QVector sollte Ihre erste Wahl sein. QVector ergibt normalerweise eine bessere Leistung als QList , da QVector seine Elemente immer sequenziell im Speicher speichert, wobei QList seine Elemente auf dem Heap allokiert, wenn sizeof (T) <= sizeof (void *) und T deklariert wurde sei entweder ein Q_MOVABLE_TYPE oder ein Q_PRIMITIVE_TYPE mit Q_DECLARE_TYPEINFO. Sehen Sie die Vor- und Nachteile der Verwendung von QList für eine Erklärung. - [QList] (http://doc.qt.io/qt-5/qlist.html) –

+0

Danke, in diesem Fall bedeutet es, dass QVector 'wird gleich sein wie' QByteArray'? –

Verwandte Themen