std::vector
è un ottimo modo per memorizzare oggetti "dinamici" (come li chiami) come oggetti, ma il vero vantaggio del vettore non è che la cosa che stai memorizzando può cambiare, ma che il numero di oggetti nel vettore può cambiare senza minimo sforzo da parte tua. Per illustrare, se avessi dovuto archiviare i tuoi Item
oggetti come un array, dovresti correggere le dimensioni dell'array in fase di compilazione ( Item items[SIZE];
), il che significa che hai un limite superiore fisso per gli elementi (tra gli altri problemi, che non sono ' t rilevante per questo argomento specifico e quindi li salterò).
È inoltre possibile allocare dinamicamente l'array in fase di runtime ( Item * items = new Item[SIZE];
), il che consentirebbe di ridimensionare l'array in un secondo momento allocando nuovo spazio di archiviazione, copiando gli elementi ed eliminando il vecchio archivio. Questo, tuttavia, richiede molto più lavoro.
Fortunatamente, questo è ciò che std::vector
fa per te: si tratta di un'implementazione di array di dimensioni dinamiche, in sostanza, e gestisce la gestione della memoria per far crescere l'array oltre la sua attuale capacità. È sicuramente l'opzione che ti suggerirei di perseguire per ora, ma tieni presente che vorrai comunque creare una Item
classe.
È molto facile da usare:
// Create an item list and two item objects to add to it.
std::vector<Item> items;
Item fireballPotion("Potion of Fireball");
Item healingPotion("Potion of Healing");
// Add the items:
items.push_back(fireballPotion);
items.push_back(healingPotion);
// operator[] is supported for accessing items.
// This will print "Potion of Fireball" for example:
std::cout << items[0].GetName();
La documentazione MSDN per la vector
classe merita probabilmente una lettura e, se non si ha familiarità con i modelli , che è ciò vector
che consente di archiviare "qualsiasi cosa", è necessario ripassare le basi anche lì. Il che mi porta anche ad un ultimo punto: mentre sembra che un vettore possa memorizzare qualsiasi cosa, ha dei vincoli per ciò che è permesso in esso e questi a volte gettano i principianti. In particolare, il tipo che memorizzi in un vettore deve essere copiabile, perché il vettore dovrà fare una copia degli oggetti quando ridimensiona la sua memoria interna, ad esempio. La regola dei tre C ++ è qualcosa da tenere a mente qui.