Quelles sont les différences entre un tableau et un vecteur en C ++? Un exemple des différences pourrait être inclus les bibliothèques, le symbolisme, les capacités, etc.
Tableau
Les tableaux contiennent un nombre spécifique d'éléments d'un type particulier. Pour que le compilateur puisse réserver la quantité d'espace requise lorsque le programme est compilé, vous devez spécifier le type et le nombre d'éléments que le tableau contiendra lors de sa définition. Le compilateur doit être en mesure de déterminer cette valeur lorsque le programme est compilé. Une fois qu'un tableau a été défini, vous utilisez l'identificateur du tableau avec un index pour accéder à des éléments spécifiques du tableau. [...] les tableaux sont indexés à zéro; autrement dit, le premier élément est à l'index 0. Ce schéma d'indexation est indicatif de la relation étroite en C ++ entre les pointeurs et les tableaux et les règles que le langage définit pour l'arithmétique des pointeurs.
- Référence de poche C ++
Vecteur
Un vecteur est une séquence d'objets de taille dynamique qui fournit
operator[]
un accès aléatoire de style tableau . La fonction membrepush_back
copie ses arguments via le constructeur de copie, ajoute cette copie comme dernier élément du vecteur et incrémente sa taille de un.pop_back
fait exactement le contraire, en supprimant le dernier élément. L'insertion ou la suppression d'éléments à partir de la fin d'un vecteur prend un temps constant amorti, et l'insertion ou la suppression de tout autre emplacement prend un temps linéaire. Ce sont les bases des vecteurs. Il y a beaucoup plus à eux. Dans la plupart des cas, un vecteur devrait être votre premier choix sur un tableau de style C. Tout d'abord, ils sont dimensionnés de manière dynamique, ce qui signifie qu'ils peuvent grandir selon les besoins. Vous n'avez pas à faire toutes sortes de recherches pour trouver une taille statique optimale, comme dans le cas des tableaux C; un vecteur s'agrandit selon les besoins et il peut être redimensionné plus ou moins manuellement si vous en avez besoin. Deuxièmement, les vecteurs offrent une vérification des limites avec laat
fonction membre (mais pas avecoperator[]
), de sorte que vous puissiez faire quelque chose si vous référencez un index inexistant au lieu de simplement regarder votre programme planter ou pire, continuer l'exécution avec des données corrompues.- Livre de recettes C ++
Réponses:
tableaux:
malloc
);sizeof
(d'où l'idiome communsizeof(arr)/sizeof(*arr)
, qui échoue cependant silencieusement lorsqu'il est utilisé par inadvertance sur un pointeur);std::vector
:&vec[0]
est garanti qu'il fonctionne comme prévu);begin()
/end()
, les STL habituellestypedef
, ...)Considérez également «l'alternative moderne» aux tableaux -
std::array
; J'ai déjà décrit dans une autre réponse la différence entrestd::vector
etstd::array
, vous voudrez peut-être y jeter un coup d'œil.la source
J'ajouterai que les tableaux sont des constructions de très bas niveau en C ++ et que vous devriez essayer de vous en éloigner autant que possible lorsque vous "apprenez les cordes" - même Bjarne Stroustrup le recommande (il est le concepteur de C ++).
Les vecteurs sont très proches des mêmes performances que les baies, mais avec de nombreuses commodités et fonctionnalités de sécurité. Vous commencerez probablement à utiliser des tableaux lors de l'interfaçage avec des API qui traitent des tableaux bruts, ou lors de la création de vos propres collections.
la source
Ces références répondent à peu près à votre question. En termes simples, les longueurs des vecteurs sont dynamiques tandis que les tableaux ont une taille fixe. lors de l'utilisation d'un tableau, vous spécifiez sa taille lors de la déclaration:
pour les vecteurs, il suffit de le déclarer et d'ajouter des éléments
Parfois, vous ne saurez pas le nombre d'éléments nécessaires, un vecteur serait donc idéal pour une telle situation.
la source