设计模式第一天|单例模式 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的使用。

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

相关推荐
.Hypocritical.14 小时前
JUC + 三大设计模式(单例、工厂、代理)
设计模式·juc·1024程序员节
是2的10次方啊16 小时前
设计模式与生活②:你只管点外卖,别管堡怎么做
设计模式
爱和冰阔落1 天前
【Linux】线程安全进阶:单例模式、可重入函数与死锁排查
linux·运维·安全·单例模式
是2的10次方啊1 天前
设计模式与生活①:你的脸,为什么不能有第二个?
设计模式
高晶2 天前
ARM 嵌入式 Linux 命令系统 BusyBox 实战指南
linux·设计模式·程序员
高晶2 天前
语音合成与变声技术十大业务场景落地实战:从电商直播到规模化生产
设计模式·程序员
博风2 天前
19、设计模式应用举例:桥接模式:制作电视节目
设计模式·桥接模式
知守观2 天前
从 4 套 PDF 库的混战,聊聊老项目的依赖管理与“静默失败”
java·后端·设计模式
geovindu3 天前
rust: Mediator Pattern
开发语言·后端·设计模式·rust·中介者模式·行为模式
SENKS_DIGITAL3 天前
金属加工遇上数字化:通快展厅里的工业蜕变-森克思科技
科技·设计模式·展厅设计·展馆设计·科技展厅设计·展览设计·企业展厅设计