我现在正在跟着GameInstitute的一本书,它要求我:
允许玩家购买和携带治疗药水和火球药水。您可以将Item数组(在定义item类之后)添加到Player类中以存储它们,或使用std :: vector来存储它们。
我想我想使用std::vector
实现,因为这似乎使我比创建一个项目类更容易些,但我不确定该怎么做。我从很多人那里听说向量是存储动态值(例如物品,武器等)的好方法,但是我没有看到它的使用。
我现在正在跟着GameInstitute的一本书,它要求我:
允许玩家购买和携带治疗药水和火球药水。您可以将Item数组(在定义item类之后)添加到Player类中以存储它们,或使用std :: vector来存储它们。
我想我想使用std::vector
实现,因为这似乎使我比创建一个项目类更容易些,但我不确定该怎么做。我从很多人那里听说向量是存储动态值(例如物品,武器等)的好方法,但是我没有看到它的使用。
Answers:
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();
vector
该类的MSDN文档可能值得一读,如果您对模板不熟悉(这是vector
用来允许它存储“任何内容”的方式),那么您也应该了解那里的基础知识。这也引出了我的最后一点:虽然看起来向量可以存储任何内容,但是它确实对其中所允许的内容有约束,并且这些约束有时会引发初学者。特别是,您存储在向量中的类型必须是可复制的,因为例如,向量在调整其内部存储器的大小时将需要复制对象。这里要记住C ++ 的三个规则。