webentwicklung-frage-antwort-db.com.de

Warum sollte man QVector (Qt) anstelle von std :: vector verwenden?

Ich bin sehr neu in C++ und Qt, aber in C #/Java bin ich sehr gut.

Der Punkt ist, ich mag plattformübergreifend, aber ich verwechsle mich mit Qt. Ist std::vector nicht bereits plattformübergreifend, kann Qt nicht mit einer nicht plattformübergreifenden Sache übereinstimmen?

Wie unterscheiden sich File und QFile?

Ein Link wäre schön, danke :)

51

Dieser Artikel sieht gut aus. Es vergleicht die Qt-Vorlagenbibliothek mit der Standardvorlagenbibliothek:

Ich hoffe, Sie finden es interessant, alle Unterschiede zu sehen, die dort im Artikel aufgeführt sind.

BEARBEITEN:

Folgendes finde ich interessant:

Meine Meinung ist, dass die größte Der Vorteil der QTL ist, dass sie .__ hat. die gleiche Implementierung (einschließlich der Binärkompatibilität) auf allen Betriebssystemen unterstützt von Qt. Einige STL Implementierungen können unter par .__ liegen. wenn es um Leistung geht oder sie Möglicherweise fehlt die Funktionalität. Etwas Plattformen haben nicht einmal eine STL! Auf Andererseits ist die STL mehr anpassbar und ist in seiner Gesamtheit in Header-Dateien… Wie gesagt, Es gibt keinen klaren Gewinner.

Wie er sagte, kein klarer Gewinner. Aber wenn man den Artikel noch liest, wird vieles klar. Es ist besser, den Unterschied zu kennen, als den einen zu wählen, ohne den anderen zu kennen.

42
Nawaz

Die QVector-Klasse verfügt über eine Referenzzählung und ist darauf ausgelegt, ohne Kopieren gemeinsam genutzt zu werden. Qt bietet viele Container an, die STL-Containern entsprechen. Ein Dokument, das diese mit einigen Erläuterungen zu den Interna und einigen Gründen beschreibt:

13
Michael Burr

Von hierher :

Qt stammt aus einer Zeit, in der C++ und die Standardbibliothek war nicht standardisiert oder gut unterstützt von Compiler. Es dupliziert daher eine Vieles, was sich jetzt in der .__ befindet. Standardbibliothek, z. B. Container und Typinformationen. Die meisten Bezeichnenderweise modifizierten sie das C++ Sprache, um Signale bereitzustellen, so dass Qt-Klassen können mit .__ nicht einfach verwendet werden. Nicht-Qt-Klassen.

8
phimuemue

std::vector von C++ ist plattformübergreifend, da es Teil des C++ - Standards ist. Jeder C++ - konforme Compiler muss es bereitstellen.

Ich bin nicht mit Qt vertraut, aber ich habe dieses in den docs gesehen:

Anmerkung: Alle Funktionen in dieser Klasse sind Wiedereintritt.

Es ist auch wahrscheinlich (Spekulation), dass die QVector-Klasse leichter integriert werden kann, um Qt-zentrierte Objekte aufzunehmen, als std::vector. Auch hier bin ich mit Qt nicht vertraut, also müssen Sie selbst entscheiden.

Als Faustregel (für die es viele Ausnahmen gibt) würde ich std::vector verwenden, es sei denn, ich hatte einen zwingenden Grund, eine bibliotheksspezifische Containerklasse zu verwenden.

1
John Dibling

Die schlechten Erfahrungen, die ich mit QTL gemacht hatte, bezogen sich darauf, dass QTL keine Ausnahmen auslöst; Dies macht es schwieriger, kritische Fehler aufzuspüren und zu beheben. STL-Implementierungen hängen auch eng mit einem Compiler zusammen, da für Teile der Bibliothek compilerspezifische Erweiterungen der Sprache erforderlich sind. Dies bedeutet, dass eine STL-Implementierung häufig QTL übertrifft, die portabel sein muss und daher nicht von den genannten Erweiterungen profitieren kann. Das Debugging-Problem war jedoch für mich kritisch.

1
user1095108

Da es keine Antwort darauf gibt, verfügen Qt-Container, einschließlich QVector, im Allgemeinen über eine vollständigere API, die eine gewisse zusätzliche Bequemlichkeit ermöglicht und die Ausführlichkeit im Vergleich zu std::vector verringert.

QVector ist nicht wirklich in die Qt-APIs integriert, diese Rolle wird von misfit QList eingenommen. Daher ist die Verwendung von QVector für die bessere Kompatibilität mit Qt-APIs kein wirkliches Argument. Beachten Sie, dass sich dies für Qt 6 ändern kann, da die Unzulänglichkeiten von QList immer mehr zur Kenntnis genommen werden.

Wenn Sie sich jedoch bereits bei Ihrer Anwendung auf Qt verlassen, ist es sinnvoll, QVector zu verwenden. Ich gehe davon aus, dass niemand eine so aufgeblähte Abhängigkeit wie Qt hinzufügen wird, nur für ein oder zwei Container. QVector ist effizient und solide und läuft problemlos auf jeder Plattform, die von Qt unterstützt wird. 

Auf der anderen Seite, wenn Sie eine Kern-Logik-API erstellen möchten, die Framework-unabhängig ist, ist es eine gute Idee, sie wenn möglich in Standard-C++ zu entwickeln, damit Sie etwas tragbares erhalten, das nicht an ein bestimmtes GUI-Framework gebunden ist Wenn Sie möchten, können Sie es in Zukunft problemlos auf ein anderes migrieren.

0
dtech