c++ 中 std::vector 的奇怪行为

问题描述 投票:0回答:1

为什么这不起作用?

这是一个基本的库存系统。

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即可。

c++ for-loop vector c++17
1个回答
0
投票

您不需要第一个

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.