std::vector
це прекрасний спосіб зберігання "динамічних" (як ви їх називаєте) речей, таких як предмети, але реальна користь вектора полягає не в тому, що річ, яку ви зберігаєте, може змінюватися, а в тому, що кількість елементів у векторі може змінюватися без мінімальних зусилля з вашого боку. Для ілюстрації, якщо ви мали би зберігати свої Item
об’єкти як масив, вам доведеться виправити розмір масиву під час компіляції ( Item items[SIZE];
), що означає, що у вас є фіксована верхня межа для елементів (серед інших питань, які не є ' t як стосується цієї конкретної тематики, тому я їх пропускаю).
Ви також можете динамічно розподілити масив під час виконання ( Item * items = new Item[SIZE];
), що дозволить пізніше змінити масив, виділивши нове сховище, скопіювавши елементи та видаливши старе сховище. Це, однак, для вас набагато більше.
На щастя, саме це std::vector
робить для вас - це реалізація масиву динамічного розміру, по суті, і керує керуванням пам'яттю для збільшення масиву понад його поточну ємність. Це, безумовно, варіант, який я б пропонував вам продовжити, але зауважте, що ви все одно хочете створити Item
клас.
Це дуже просто у використанні:
// 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();
Документацію MSDN для vector
класу , напевно, варто прочитати, і якщо ви не знайомі з шаблонами - саме це vector
використовує для того, щоб він міг зберігати "що завгодно" - вам слід також ознайомитися з основами. Що також призводить мене до остаточного моменту: хоча він, схоже, вектор може зберігати що завгодно, у нього є обмеження для того, що в ньому дозволено, а це іноді кидає початківців. Зокрема, тип, який ви зберігаєте у векторі, повинен бути копіюваним, оскільки вектору потрібно буде зробити копію об'єктів, наприклад, змінивши його внутрішнє сховище. Правило C ++ з трьох має тут пам’ятати.