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

C++编写for循环匹配两vector共享元素仅首条生效的解决方法

问题根因
  • 仅读取了订单文件的第一条记录:当前代码只执行了一次订单读取和入队操作,没有加循环读取orders_v5.txt内的所有订单,导致arrOrders容器中永远只有1条数据,自然只能处理第一条订单。
  • find_if的lambda实现逻辑错误:find_if本身会自动遍历目标容器的所有元素,lambda参数就是当前遍历到的Stock对象,不需要在lambda内部额外嵌套for循环遍历arrStock,多余的循环导致判断逻辑完全失效。
  • 库存校验逻辑错位:当前代码分开查找匹配title的商品、库存满足要求的商品,两个查找逻辑没有关联,哪怕找到的是完全不相关的商品库存满足,也会误判为当前订单库存足够,完全不符合需求。
修正后的checkStock函数代码
void checkStock()
{
    std::ifstream inFile("orders_v5.txt");
    if (!inFile.is_open()) {
        std::cout << "订单文件打开失败" << std::endl;
        return;
    }
    
    Order anOrder;
    std::string orderTitle;
    int orderStock;

    // 循环读取所有订单存入arrOrders
    while (inFile >> anOrder.orderTitle >> anOrder.orderStock) {
        arrOrders.push_back(anOrder);
    }
    inFile.close();

    std::cout << "#########################################################################################" << std::endl;
    std::cout << "                                      ORDER REPORT" << std::endl;
    std::cout << "#########################################################################################" << std::endl;

    for (unsigned int k = 0; k < arrOrders.size(); k++)
    {
        orderTitle = arrOrders[k].getTitle();
        orderStock = arrOrders[k].getStock();
        // 查找和当前订单title匹配的商品
        auto matchedStock = find_if(arrStock.begin(), arrStock.end(), [&orderTitle](const Stock& stock)->bool
            {
                // 直接判断当前遍历的商品title是否和订单title一致即可,不需要额外循环
                return stock.getTitle() == orderTitle;
            });
        
        if (matchedStock != arrStock.end())
        {
            // 直接校验匹配到的商品的库存是否足够
            if (matchedStock->getStockLevel() >= orderStock)
            {
                std::cout << orderTitle << " 在售,库存充足可满足订单需求。" << std::endl;
            }
            else
            {
                std::cout << orderTitle << " 在售,但库存不足无法满足订单需求。" << std::endl;
            }

        }
        else
        {
            std::cout << orderTitle << " 未在售。" << std::endl;
        }
    }
}
额外优化建议
  • 可以在find_if的lambda参数中使用引用传递const Stock& stock,避免频繁拷贝Stock对象提升性能
  • 新增文件打开失败的判断,避免文件不存在时程序无报错异常运行
  • 输出内容末尾添加换行符,避免所有打印内容挤在同一行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:45:04