Je suis avec un livre de GameInstitute en ce moment, et il me demande de:
Permettez au joueur d'acheter et de porter des potions de guérison et des potions de boule de feu. Vous pouvez ajouter un tableau Item (après avoir défini la classe item) à la classe Player pour les stocker, ou utiliser un vecteur std :: pour les stocker.
Je pense que je voudrais utiliser l' std::vector
implémentation, car cela semble me dérouter moins que de créer une classe d'élément, mais je ne sais pas comment le faire. Beaucoup de gens m'ont dit que les vecteurs sont d'excellents moyens de stocker des valeurs dynamiques (comme des objets, des armes, etc.), mais je ne l'ai pas vu utilisé.
c++
text-based
Vladimir Marenus
la source
la source
Réponses:
std::vector
est un bon moyen de stocker des éléments "dynamiques" (comme vous les appelez) comme des éléments, mais le véritable avantage du vecteur n'est pas que la chose que vous stockez peut changer, mais que le nombre d'éléments dans le vecteur peut changer sans minimum effort de votre part. Pour illustrer, si vous deviez stocker vosItem
objets en tant que tableau, vous devrez fixer la taille du tableau lors de la compilation (Item items[SIZE];
), ce qui signifie que vous avez une limite supérieure fixe pour les éléments (entre autres problèmes, qui ne sont pas '' t comme pertinents pour ce sujet spécifique et je vais donc les ignorer).Vous pouvez également allouer dynamiquement le tableau lors de l'exécution (
Item * items = new Item[SIZE];
), ce qui vous permettrait de redimensionner le tableau plus tard en allouant un nouveau stockage, en copiant les éléments et en supprimant l'ancien stockage. Cependant, c'est beaucoup plus de travail pour vous.Heureusement, c'est ce
std::vector
que vous faites - c'est une implémentation de tableau de taille dynamique, essentiellement, et gère la gestion de la mémoire pour augmenter le tableau au-delà de sa capacité actuelle pour vous. C'est certainement l'option que je vous suggère de poursuivre pour l'instant - mais notez que vous voudrez toujours créer uneItem
classe.C'est très simple à utiliser:
La documentation MSDN pour la
vector
classe vaut probablement la peine d'être lue, et si vous n'êtes pas familier avec les modèles - ce qui estvector
utilisé pour lui permettre de stocker "n'importe quoi" - vous devriez également vous brosser les bases. Ce qui m'amène également à un dernier point: bien qu'il semble qu'un vecteur puisse stocker n'importe quoi, il a des contraintes pour ce qui est autorisé et cela lance parfois des débutants. En particulier, le type que vous stockez dans un vecteur doit être copiable, car le vecteur devra par exemple faire une copie des objets lors du redimensionnement de sa mémoire interne. La règle de trois de C ++ est quelque chose à garder à l'esprit ici.la source