秦悦明的运维笔记

c++队列 queue

1. 队列

类比生活中,就是排队的现象,先进先出。

2. c++中的队列

不用自己实现,stl帮你实现了。只需要:

1
#include <quque>

queue支持下面几种操作.

操作 说明
q.empty() 判断是否为空
q.size() 大小
q.pop() 头部删除元素
q.front() 返回头部的元素
q.push(item) 从尾部添加元素

非常简洁。

3. 计算机中的例子

最经典的莫过于cpu多进程模型了,n个进程,每消耗X的cpu时间,就切换到其他进程去执行,看上去计算机是多进程同时在跑的。

aoj里面有个经典的例子:

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_3_B

我自己的实现是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <queue>
using namespace std;
struct pp
{
string name;
int time;
};
int main(int argc, char const *argv[])
{
int n, q ;
cin>>n>>q;
queue<pp> que;
for (int i = 0; i < n; ++i)
{
pp x;
cin>>x.name>>x.time;
que.push(x);
}
// debug print it
int now=0;
while(!que.empty())
{
pp a = que.front();
// >100
if (a.time - q>0 )
{
now += q ;
a.time -= q;
// debug
// cout << "name: "<<a.name<< "\ta.spentime: "<< a.time + now<< " \n";
// cout << "now: " << now << endl;
que.pop();
que.push(a);
}
// < 100
else
{
now += a.time;
// cout << "name: "<<a.name<< "\ta.spentime: "<< now + a.time<< " \n";
// cout << "now: " << now << endl;
cout << a.name << " " << now << endl;
que.pop();
}
// cout << "name: " << que.front().name << "\ttime: " << que.front().time<< endl;
// que.pop();
}
return 0;
}

算是一个queue的典型用法了。