【设计模式专题之单例模式】1.小明的购物车
单例模式:
#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的使用。
设计模式第一天打卡,加油!!!