67 votes

Pourquoi utiliser QVector(Qt) au lieu de std::vector

Je suis très novice en matière de C++ et de Qt, mais je suis très bon en C#/Java.

Le fait est que j'aime le multiplateforme, mais je suis confus avec Qt. N'est pas std::vector déjà multiplateforme, Qt ne fournit-il pas un équivalent à une chose non multiplateforme ?

Comment sont aussi File y QFile différent ?

Un lien serait le bienvenu, merci :)

50voto

Nawaz Points 148870

Cet article a l'air bien. Il compare la bibliothèque Qt Template avec la bibliothèque Standard Template :

J'espère que vous trouverez intéressant de voir toutes les différences énumérées dans l'article.

EDITAR:

Voici ce que je trouve intéressant :

Mon opinion est que le Le plus grand avantage de avantage du QTL est qu'il dispose de la même la même implémentation (y compris la compatibilité binaire) sur tous les OS supportés par Qt . Certaines implémentations STL peuvent être en dessous de la moyenne en termes de performances ou bien elles ou bien il leur manque des fonctionnalités. Certains sites plateformes n'ont même pas de STL ! Sur d'autre part, la STL est plus personnalisable et est disponible dans son dans son intégralité dans les fichiers d'en-tête Comme je l'ai dit, il n'y a pas de vainqueur clair .

Comme il l'a dit, pas de vainqueur clair. Mais la lecture de l'article permet de clarifier beaucoup de choses. Il vaut mieux connaître la différence que d'opter pour l'un sans connaître l'autre.

15voto

Michael Burr Points 181287

La classe QVector compte les références et est conçue pour être partagée sans être copiée. Qt fournit un grand nombre de conteneurs qui correspondent aux conteneurs STL. Un document qui les décrit avec quelques explications sur les éléments internes et un peu de logique :

9voto

phimuemue Points 11644

Desde par ici :

Qt est issu d'une époque où le C++ et la la bibliothèque standard n'étaient pas standardisés ou bien supportés par les compilateurs. Il fait donc double emploi avec beaucoup de choses qui sont maintenant dans la bibliothèque standard, comme les conteneurs et les informations sur les types. Le plus important significativement, ils ont modifié le langage C++ pour fournir des signaux, de sorte que les classes Qt peuvent être utilisées facilement avec classes non-Qt.

1voto

user1095108 Points 3249

La mauvaise expérience que j'ai eue avec QTL était lié à QTL ne soulevant aucune exception, ce qui rend plus difficile le repérage et la correction des erreurs critiques. Aussi, STL sont étroitement liées à un compilateur, car certaines parties de la bibliothèque nécessitent des extensions du langage spécifiques au compilateur. Cela signifie qu'une STL peut souvent surpasser les performances QTL qui doit être portable et ne peut donc pas bénéficier de ces extensions. Le problème du débogage était cependant crucial pour moi.

0voto

John Dibling Points 56814

C++'s std::vector est multiplateforme car il fait partie de la norme C++. Chaque compilateur conforme à la norme C++ doit le fournir.

Je ne suis pas familier avec Qt, mais j'ai vu ceci dans les docs :

Remarque : Toutes les fonctions de cette classe sont réentrantes.

Il est également probable (spéculation) que la classe QVector soit plus facilement intégrée pour contenir des objets centrés sur Qt que la classe std::vector pourrait être. Encore une fois, je ne suis pas familier avec Qt, vous devez donc décider par vous-même.

En règle générale (il y a de nombreuses exceptions), j'aurais tendance à utiliser std::vector à moins que j'aie une raison impérieuse d'utiliser une classe conteneur spécifique à une bibliothèque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X