设计模式第一天|单例模式 1.小明的购物车

目录

【设计模式专题之单例模式】1.小明的购物车

文章链接:卡码网设计模式

题目链接:1.小明的购物车

单例模式:

cpp 复制代码
#include <iostream>
#include <unordered_map>
#include <vector>

using namespace std;

class ShoppingCartManager {
private:
    unordered_map<string, int> cart;
    vector<string> order; // 保持顺序

    // 私有构造函数
    ShoppingCartManager() {}

public:
    // 获取购物车实例
    static ShoppingCartManager& getInstance() {
        static ShoppingCartManager instance;
        return instance;
    }

    // 添加商品
    void addToCart(const string& itemName, int quantity) {
        if (cart.find(itemName) == cart.end()) {
            order.emplace_back(itemName);
        }
        cart[itemName] += quantity; +=和=都行
    }

    // 查看商品
    void viewCart() const {
        for (const auto& itemName : order) {
            cout << itemName << " " << cart.at(itemName) << endl;
        }
    }
};

int main() {
    string itemName;
    int quantity;

    ShoppingCartManager& cart = ShoppingCartManager::getInstance();

    while (cin >> itemName >> quantity) {
        cart.addToCart(itemName, quantity);
    }

    cart.viewCart();

    return 0;
}

这题注意清单输出顺序,map底层是红黑树,unordered_map底层是哈希表,无法保证输出顺序和输入相同,这里创建了一个vector来保证输出顺序,并使用了emplace_back方法,在向量的末尾直接构造一个元素,而不是先创建一个元素对象再将其复制或移动到向量中(push_back)。

另外注意程序中&和const的使用。

设计模式第一天打卡,加油!!!

相关推荐
workflower1 小时前
人形机器人全身运动控制能力大幅提升
人工智能·深度学习·机器学习·设计模式·机器人·自动化
折哥的程序人生 · 物流技术专研1 小时前
Java 23 种设计模式:从踩坑到精通 | 备忘录模式 —— 快照与撤销,给对象装一个“后悔药”
java·设计模式·备忘录模式·行为型模式·java设计模式·从踩坑到精通·撤销重做
Kel1 小时前
万物皆 Runnable:LangChain 如何用一个接口统一模型、链与图
人工智能·设计模式·架构
ttod_qzstudio4 小时前
【软考设计模式】策略模式:算法族的封装与动态切换精讲
设计模式·策略模式
咖啡八杯12 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
ttod_qzstudio13 小时前
【软考设计模式】外观模式:复杂子系统的“门面“封装与代码填空精讲
设计模式·外观模式
geovindu20 小时前
CSharp: Prototype Pattern
开发语言·后端·设计模式·.net·原型模式·创建型模式
ttod_qzstudio20 小时前
【软考设计模式】组合模式:“部分-整体“层次结构与树形对象统一操作精讲
设计模式·组合模式
ttod_qzstudio1 天前
【软考设计模式】装饰模式:“套娃“式增强与动态职责扩展精讲
设计模式·装饰模式
烬羽1 天前
MCP 多服务器架构实战:一个 Agent 同时操控地图、浏览器和文件
设计模式·设计