2014-04-23 18:10

题目:设计一个点唱机。

解法:英文叫Musical Jukebox。这是点唱机么?卡拉OK么?这种题目实在是云里雾里,又没有交流的余地,我索性用一个vector来表示一首曲子吧。不过有一点是肯定的,点播行为和播放行为应该分不同线程操作,这样就不至于让机器一直卡在那儿等你点歌了。

代码:

 // 8.3 Design a data structure to simulate a musical jukebox.
#include <iostream>
#include <queue>
#include <string>
#include <thread>
#include <vector>
using namespace std; class JukeBox {
public:
JukeBox() {}; void start() {
work = new thread(workThread, this);
}; void addSong(vector<int> &song) {
songs.push_back(song);
} void orderSong(int id) {
if (id < || id > (int)songs.size() - ) {
return;
}
song_list.push(id);
} friend void workThread(JukeBox *); ~JukeBox() {
while (!song_list.empty()) {
song_list.pop();
}
size_t i;
for (i = ; i < songs.size(); ++i) {
songs[i].clear();
}
songs.clear();
work->detach();
delete work;
};
private:
queue<int> song_list;
vector<vector<int> > songs;
thread *work;
}; void workThread(JukeBox *jb) {
size_t i;
while (true) {
if (!jb->song_list.empty()) {
for (i = ; i < jb->songs[jb->song_list.front()].size(); ++i) {
cout << jb->songs[jb->song_list.front()][i] << ' ';
}
cout << endl;
jb->song_list.pop();
}
}
}; int main()
{
JukeBox *jb;
string cmd;
int id;
int i, n;
vector<int> song; jb = new JukeBox();
jb->start();
while (cin >> cmd) {
if (cmd == "add") {
cin >> n;
song.resize(n);
for (i = ; i < n; ++i) {
cin >> song[i];
}
jb->addSong(song);
} else if (cmd == "order") {
cin >> id;
jb->orderSong(id);
} else if (cmd == "end") {
break;
}
}
delete jb; return ;
}

最新文章

  1. centos6.3安装python2.7, pip2.7, mysql
  2. 自己编写基于MVC的轻量级PHP框架
  3. Apache服务器中配置虚拟机的方法
  4. 基于kryonet的RPC,使用kryo进行序列化
  5. .NET aspx页面中的按钮无法响应事件
  6. javascript 简易文本编辑器
  7. trie树模板(统计难题)
  8. ArcCore重构-头文件引用问题的初步解决
  9. 101 - kube-scheduler源码分析 - k8s源码组织结构概览
  10. [物理学与PDEs]第4章第2节 反应流体力学方程组 2.3 混合气体状态方程
  11. 毕加索发布轻量化转化引擎及BIMSOP协作云平台
  12. javascript继承的6种方法
  13. 前端基础进阶(五):全方位解读this
  14. 多态、抽象类、接口_DAY09
  15. HTTPS原理简述
  16. Phonegap 原生控件(Android)与html混合
  17. IOS 创建简单表视图
  18. Delphi 类引用 Class Reference 元类 MetaClass 用法
  19. hbase集群配置
  20. Linux : select()详解 和 实现原理【转】

热门文章

  1. 修改Linux中发送邮件中附件大小的限制
  2. 【转载】#324 - A Generic Class Can Have More than One Type Parameter
  3. framework7 1.3.5 路由跳转后DOM失效问题
  4. 类似LIS+贪心(ZOJ1025)
  5. 成绩累加排名,poj(2153)
  6. 解决Gearman 报sqlite3错误
  7. Responsive设计 (响应式设计)
  8. EF 集合版 增删查改
  9. Python-三元运算符和lambda表达式
  10. react中内联样式的z-index不起作用.