队列也是一种逻辑数据结构,其具有先进先出的特性,只能在队的前端进行删除, 在队的后端进行插入。针对这种特性,可以实现一些较为复杂的逻辑。和stack一样,queue不能创建迭代器对象来遍历。因为stack是先进后出,queue是先进先出,**为了不影响这种结构,因此不能通过迭代器进行遍历。但是可以使用普通for循环将队列中每个元素依次pop和front出来达到遍历的目的。**例:
for (int j = 0; j < n; j++)
{
e = q1.front();//q1为queue
cout << e << " ";
q1.pop();
}
priority_queue优先队列
- 要求队列中最大的元素位于队列首部。依次递减。
- 当优先队列的类型为类或结构体时,可以自定义优先队列的优先顺序,通过重载<运算符。
struct info
{
string name;
float score;
//重载<运算符
bool operator<(const info& a) const {
return a.score > score;
}
};
priority_queue <info> pq;
info in;
in.name = "Jack";
in.score = 68.5;
pq.push(in);
in.name = "Bomi";
in.score = 18.5;
pq.push(in);
in.name = "Peti";
in.score = 90;
pq.push(in);
while (!pq.empty()
{
//遍历首部元素方法
cout << pq.top().name << ": " << pq.top().score << endl;
pq.pop();
}
普通队列queue基本操作
queue入队,如例:q.push(x); 将x 接到队列的末端。
queue出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问queue队首元素,如例:q.front(),即最早被压入队列的元素。
访问queue队尾元素,如例:q.back(),即最后被压入队列的元素。
判断queue队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()
队列没有迭代器,所以没有begin,end等
优先队列不能使用front读取,优先队列不能使用back读取。