Ich verfolge gerade ein Buch von GameInstitute und es fordert mich auf:
Erlaube dem Spieler, Heiltränke und Feuerballtränke zu kaufen und zu tragen. Sie können der Player-Klasse ein Item-Array hinzufügen (nachdem Sie die Item-Klasse definiert haben), um sie zu speichern, oder einen std :: -Vektor verwenden, um sie zu speichern.
Ich denke, ich würde die std::vector
Implementierung gerne verwenden , da mich das weniger verwirrt als das Erstellen einer Elementklasse, aber ich bin mir nicht sicher, wie ich das tun soll. Ich habe von vielen Leuten gehört, dass Vektoren großartige Möglichkeiten zum Speichern dynamischer Werte (wie Gegenstände, Waffen usw.) sind, aber ich habe nicht gesehen, dass sie verwendet werden.
c++
text-based
Vladimir Marenus
quelle
quelle
Antworten:
std::vector
ist eine gute Möglichkeit, "dynamische" (wie Sie sie nennen) Dinge wie Elemente zu speichern, aber der wahre Vorteil des Vektors besteht nicht darin, dass sich das, was Sie speichern, ändern kann, sondern dass sich die Anzahl der Elemente im Vektor ohne Minimum ändern kann Anstrengung von Ihrer Seite. Wenn Sie IhreItem
Objekte als Array speichern möchten, müssen Sie zur Kompilierungszeit die Größe des Arrays festlegen (Item items[SIZE];
). Dies bedeutet, dass Sie eine feste Obergrenze für Elemente haben (unter anderem Probleme, die nicht auftreten). t als relevant für dieses spezielle Thema und so werde ich sie überspringen).Sie können das Array auch zur Laufzeit (
Item * items = new Item[SIZE];
) dynamisch zuweisen, um die Größe des Arrays später zu ändern, indem Sie neuen Speicher zuweisen , die Elemente kopieren und den alten Speicher löschen. Dies ist jedoch viel mehr Arbeit für Sie.Glücklicherweise
std::vector
bedeutet dies für Sie Folgendes: Es handelt sich im Wesentlichen um eine Array-Implementierung mit dynamischer Größe, die die Speicherverwaltung übernimmt, um das Array über seine derzeitige Kapazität hinaus zu vergrößern. Es ist definitiv die Option, die Sie vorerst verfolgen sollten - aber beachten Sie, dass Sie immer noch eineItem
Klasse erstellen möchten .Es ist sehr einfach zu bedienen:
Die MSDN-Dokumentation für die
vector
Klasse ist wahrscheinlich eine Lektüre wert. Wenn Sie nicht mit Vorlagen vertraut sind, mit denenvector
"alles" gespeichert werden kann, sollten Sie auch dort die Grundlagen auffrischen. Was mich auch zu einem letzten Punkt führt: Während es so aussieht, als ob ein Vektor alles speichern kann, gibt es Einschränkungen für das, was darin erlaubt ist, und diese werfen manchmal Anfänger. Insbesondere muss der Typ, den Sie in einem Vektor speichern, kopierbar sein, da der Vektor beispielsweise beim Ändern der Größe seines internen Speichers eine Kopie der Objekte erstellen muss. C ++ 's Regel von drei ist hier etwas im Auge zu behalten.quelle