std::vector
это прекрасный способ хранить «динамические» (как вы их называете) вещи, такие как предметы, но реальное преимущество вектора заключается не в том, что вещи, которые вы храните, могут измениться, а в том, что количество элементов в векторе может меняться без минимальных усилия с вашей стороны. Чтобы проиллюстрировать, если бы вы хранили свои Item
объекты в виде массива, вы должны были бы зафиксировать размер массива во время компиляции ( Item items[SIZE];
), что означает, что у вас есть фиксированный верхний предел для элементов (среди других проблем, которые не ' Это относится к этой конкретной теме, поэтому я пропущу их).
Вы также можете динамически размещать массив во время выполнения ( 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 ++ - это то, что нужно иметь в виду.