You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中std::vector异常问题:基础库存系统代码为何失效?

问题分析与修正

你的代码核心逻辑存在三个关键错误,导致无法实现预期的库存管理功能:

错误点说明

  • 遍历过程中重复添加元素:在else块的for循环里,每一次迭代都执行inventory.push_back(i),这会导致遍历原有库存时,每遍历一个元素就新增一个条目,完全偏离了“找到同名则更新数量,否则新增单个条目”的逻辑。
  • 错误的数量更新方式:当找到同名元素时,你没有直接修改原有元素的quantity,而是创建了一个新的Item对象并设置其数量为原数量+1,随后将这个新对象添加到库存中,这会导致库存中出现重复的同名条目,而非更新原有条目的数量。
  • 未处理“无同名元素”的分支:遍历完所有库存元素后,如果没有找到同名条目,代码没有执行“新增数量为1的新条目”的操作,反而在遍历的每一次非匹配迭代中都添加了数量为1的新条目。

修正后的代码

#include <vector>
#include <string>
#include <iostream>

struct Item
{
    int quantity;
    std::string name;
};

std::vector<Item> inventory; // 确保全局变量或正确的作用域声明

void AddItemToInventory(std::string itemName)
{
    // 先遍历库存查找同名元素
    for (auto& item : inventory)
    {
        if (item.name == itemName)
        {
            item.quantity += 1; // 直接修改原有元素的数量
            return; // 找到后直接返回,无需后续操作
        }
    }
    
    // 遍历结束未找到同名元素,新增条目
    Item newItem;
    newItem.name = itemName;
    newItem.quantity = 1;
    inventory.push_back(newItem);
    
    // 可选:空库存的情况已经被上述逻辑覆盖,无需单独判断
    if (inventory.size() == 1)
    {
        std::cout << "EMPTY\n";
    }
}

修正逻辑说明

  1. 先遍历整个库存,找到同名元素时直接修改其数量,然后立即返回,避免后续不必要的操作。
  2. 如果遍历完所有元素都没有找到同名条目,再创建新的Item对象并添加到库存中。
  3. 原有的空库存判断可以被简化,因为当库存为空时,循环不会执行,直接进入新增条目的逻辑,此时库存大小变为1,可以按需输出提示。

内容的提问来源于stack exchange,提问作者KrystianCoder2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:29:52