为什么这不起作用?
这是一个基本的库存系统。
inventory
是 std::vector<Item>
并且 Item
是一个带有 int quantity
和 std::string name
的结构体。
struct Item
{
int quantity;
std::string name;
};
void AddItemToInventory(std::string itemName)
{
Item i;
i.name = itemName;
if(inventory.empty())
{
i.quantity = 1;
inventory.push_back(i);
std::cout << "EMPTY\n";
}
else
{
for (auto& item : inventory)
{
if(i.name == item.name)
{
i.quantity = item.quantity + 1;
}
else
{
i.quantity = 1;
}
inventory.push_back(i);
}
}
}
我期待它能发挥作用。当它为空时,将一个添加到
inventory
的name
,当它不为空时,添加另一个。如果存在则quantity
加1即可。
您不需要第一个
empty()
检查,循环将很好地处理空的 vector
。
您的循环是错误的,因为您正在修改
quantity
中每个 Item
的 vector
,并且在每次迭代时将新的 Item
推入 vector
。
只需循环遍历
vector
寻找所需的 Item
。如果找到,请更新,如果没有找到,请添加。
试试这个:
void AddItemToInventory(std::string itemName)
{
for (auto& item : inventory)
{
if (i.name == item.name)
{
i.quantity = item.quantity + 1;
return;
}
}
Item i;
i.name = itemName;
i.quantity = 1;
inventory.push_back(i);
}