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

Je suis très débutant en C ++ et Qt, mais je suis très bon en C # / Java.

Le point est que j’aime la multiplate-forme, mais je suis confus avec Qt. N’est-ce pas std::vector déjà multi-plateforme, Qt ne fournit-il pas l’équivalent d’une chose non-crossplatform?

Aussi, comment File et QFile sont- QFile différents?

Un lien serait bien, merci 🙂

Cet article est bon. Il compare la bibliothèque de modèles Qt avec la bibliothèque de modèles standard:

  • QTL vs STL

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

MODIFIER:

Voici ce que je trouve intéressant:

Mon avis est que le plus grand avantage de QTL est qu’il a la même implémentation (y compris la compatibilité binary) sur tous les systèmes d’exploitation pris en charge par Qt . Certaines implémentations STL peuvent être inférieures aux performances en termes de performances ou de fonctionnalités manquantes. Certaines plates-formes n’ont même pas de STL! D’autre part, la STL est plus personnalisable et est disponible dans son intégralité dans les fichiers d’en-tête… Comme je l’ai dit, il n’y a pas de gagnant clair .

Comme il l’a dit, pas de gagnant clair. Mais toujours en lisant l’article rend beaucoup de choses claires. Il vaut mieux connaître la différence que d’en choisir un, sans connaître l’autre.

La classe QVector est comptée par référence et est destinée à être partagée sans copie. Qt fournit beaucoup de conteneurs qui correspondent aux conteneurs STL. Un document qui les décrit avec quelques explications sur les éléments internes et quelques explications:

  • À l’intérieur des conteneurs Qt 4

De là – bas :

Qt provient d’une époque où C ++ et la bibliothèque standard n’étaient pas standardisées ou bien sockets en charge par les compilateurs. Il duplique donc beaucoup de choses qui se trouvent maintenant dans la bibliothèque standard, telles que les conteneurs et les informations de type. Plus important encore, ils ont modifié le langage C ++ pour fournir des signaux, de sorte que les classes Qt ne peuvent pas être utilisées facilement avec les classes non-Qt.

Le std::vector C ++ est multi-plateforme car il fait partie du standard C ++. Tout compilateur conforme C ++ doit le fournir.

Je ne suis pas familier avec Qt, mais je l’ai vu 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 aux objects centrés sur Qt que ne le serait std::vector . 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 (avec de nombreuses exceptions), j’aurais tendance à utiliser std::vector moins d’avoir une raison impérieuse d’utiliser une classe de conteneur spécifique à une bibliothèque.

La mauvaise expérience que j’ai eu avec QTL était liée à QTL ne soulevant aucune exception; Cela rend plus difficile le suivi et la correction des erreurs critiques. En outre, les implémentations STL sont étroitement liées à un compilateur, car certaines parties de la bibliothèque nécessitent des extensions spécifiques au compilateur. Cela signifie qu’une implémentation STL peut souvent surpasser QTL , qui doit être portable et ne peut donc pas bénéficier desdites extensions. Le problème de débogage était essentiel pour moi cependant.